为什么下拉选择通过nil作为参数?

时间:2013-03-28 09:46:00

标签: mysql ruby-on-rails

我使用以下代码在我的应用程序中创建了一个下拉列表:

<% 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'作为参数。可能是什么原因?

2 个答案:

答案 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

Ruby on Rails : symbol as argument in form_for