我的表单中有两个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>
答案 0 :(得分:0)
您有两种方式:
使用jquery。这样的事情 -
$(select_category).on('change', function(){ update_subcategory_options() })
其中update_subcategory_options() - ajax请求或其他代码。
答案 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'