在选择另一个collection_select时填充collection_select字段

时间:2014-05-08 12:06:35

标签: ruby-on-rails ruby-on-rails-4

我的表单中有两个collection_select字段。一种是选择类别,另一种是选择子类别。我希望根据选择的类别填充子类别字段。我有人选择类别1,然后属于类别1的子类别将填充在第二个collection_select字段中。我不知道该怎么做。我在下面的代码中尝试了哪些修改。

<div class="field">
<%= f.label :category_id %><br>
<%= f.collection_select(:category_id, Category.find(:all), :id, :name) %>
</div>
<div class="field">
<%= f.label :subcategory_id %><br>
<%= f.collection_select(:subcategory_id, Subcategory.where(category_id: :category_id), :id, :name) %>
</div>

2 个答案:

答案 0 :(得分:0)

您有两种方式:

使用jquery。这样的事情 -

$(select_category).on('change', function(){ update_subcategory_options() })

其中update_subcategory_options() - ajax请求或其他代码。

或者使用集合选择(http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/option_groups_from_collection_for_select

答案 1 :(得分:0)

您需要ajax才能获得此功能

试试这个例子:

<强> form.html.erb

<script>
$(document).ready(fnction(){
   $('#category_id').change(function(){
       var value = $(this).val()
       $.ajax({
          type: 'POST',
          url: 'options',
          data: {id: value},
          success: function(data){
            $('#subcategory').html(data)
          }
       })
   })
})
</script>
<div class="field">
<%= f.label :category_id %><br>
<%= f.collection_select(:category_id, Category.find(:all), :id, :name) %>
</div>
<div id="subcategory"></div>

<强>控制器:

def options
     id = params[:id]
     @subcategory = Subcategory.where(:category_id => id)
     render :partial => 'options'
end

<强> _options.html.erb:

<%= f.label :subcategory_id %><br>

更改此行

<%= f.collection_select(:subcategory_id, @subcategory, :id, :name) %>

<%= f.input :subcategory_id, @subcategory %>

最后在 Routes.rb

post '/options' => 'categories#options'