【问题标题】:How can I create dynamic form select in Rails 6 with jquery如何使用 jquery 在 Rails 6 中创建动态表单选择
【发布时间】:2019-12-28 11:51:34
【问题描述】:

我是 Rails 和 Web 开发的新手。我正在尝试在我的类别和子类别表单上创建一个动态表单选择,以便自动加载与所选类别关联的子类别。这是我尝试过但没有奏效的方法。每当我重新加载页面时,即使我选择了一个项目,我也会在下拉列表中列出子类别

路线:

post '/subcategories/find_by_category', to: 'subcategories#find_by_category'

控制器

class SubcategoriesController < ApplicationController

  def show; end

  def find_by_category
    category = Category.find(params[:category_id])
    subcategories = category.subcategories.find_all
    render json: {subcategories: subcategories}
  end
end

型号

class Category < ApplicationRecord
  has_many :subcategories
end

class Subcategory < ApplicationRecord
  belongs_to  :category, required: false
end

查看

          <div class="field">
            <label class="label">Category</label>
           <%= f.collection_select :category_id, Category.all, :id, :name %>  
          </div>

            <div class="field">
                   <label class="label">Sub Category</label>
                   <%= f.select :subcategory_id, options_for_select([])  %>  
             </div>



               <script>

                 $(document).ready(function(){
                 var getSubcategories = function(category_id){
                 var subcategories = $('#service_subcategory_id');
                 $($subcategories).empty();

                $.service('/subcategories/find_by_category', { category_id: category_id},  
                function(data){
                $.each(data.subcategories, function(index, subcategory){
                var option = $('<option />');
                option.attr('value', subcategory.id);
                option.text(subcategory.name);
                option.appendTo($subcategories);

                 });

                   })

                    };

              var getSelectedCategory = function(){
                return $('#service_category_id').val();

              };

               $('#service_category_id').change(function() {
             var category_id = getSelectedCategory();
           getSubcategories (category_id);

            });

           getSubcategories(getSelectedCategory());


             });

          </script>

我在控制台上收到此错误

readyException.js:6 Uncaught ReferenceError: $subcategories is not defined
at getSubcategories (edit:493)
at HTMLDocument.<anonymous> (edit:520)
at mightThrow (deferred.js:97)
at process (deferred.js:139)

【问题讨论】:

    标签: javascript jquery ruby-on-rails


    【解决方案1】:

    您调用的变量与您定义的不同。

    你写道:

    var subcategories = $('#service_subcategory_id');
    $($subcategories).empty();
    

    这里有两个问题。

    1. 您没有定义变量$subcategories,但您正在尝试引用它。
    2. 您正试图在 JQuery 中包装 $subcategories 变量,我认为这与您尝试做的事情是多余的,因为上面的变量已经是一个 JQuery 对象。

    如果这有助于您记住它是一个 JQuery 对象,您可以以 $ 开头命名变量,但这应该会让您进入下一个阻止程序:

    var $subcategories = $('#service_subcategory_id');
    $subcategories.empty();
    

    【讨论】:

    • 您好,感谢您的帮助。我已经尝试过您的建议,另一个错误是我在控制台上得到的:readyException.js:6 Uncaught TypeError: $.service is not a function at getSubcategories (edit:498) at HTMLDocument. (edit:522) at mayThrow (deferred.js:97) 在进程 (deferred.js:139)
    • @GeniClasses 这是个好消息,这意味着您的代码现在正在执行到下一行。不过,我不认为 service 是一种 JQuery 方法。 api.jquery.com,所以看起来您正在尝试调用一个不存在的方法,除非您使用的是 JQuery 扩展?
    • @GeniClasses 我已经改变了你的标签。您遇到了与 Rails 或 Ruby 无关的 Javascript 问题。希望 JS 和 JQuery 标签能帮助您获得更多帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    相关资源
    最近更新 更多