我使用以下代码在我的应用程序中创建了一个下拉列表:
<% form_for :categories, :url=> {:controller => 'products', :action => 'cat'} do |f| %>
<%= f.select(:category , Categories.all.map{ |u| [u.name, u.id] }, :prompt => "Select a category") %>
<input type="submit" value="go"/>
<%end%>
控制器:
def cat
@products = Product.search_category params[:category]
end
当我从下拉列表中选择任何类别时,它返回'nil'作为参数。可能是什么原因?
答案 0 :(得分:1)
您应该期望类别ID位于params[:categories][:category]
,因为这就是表单的设置方式。如果您要使用params[:category]
,请将名称选项传递给select
<%= f.select :category, Categories.all.map{ |u| [u.name, u.id] }, { :prompt => "Select a category" }, { name: 'category' } %>
除此之外,我发现在处理ActiveRecord表时使用collection_select
会更好
<%= f.collection_select :category, Categories.all, :id, :name, { prompt: 'Select a category' }, { name: 'category' } %>
答案 1 :(得分:-1)
我认为问题在于您使用form_for的符号。通常,对象被传递给form,因为它将生成适当的路由。
这个问题在这里讨论
fields_for doesnt working when form_for use symbol
和