0

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

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

4

2 回答 2

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' } %>

除此之外,我发现collection_select在处理 ActiveRecord 表时使用它会更好

<%= f.collection_select :category, Categories.all, :id, :name, { prompt: 'Select a category' }, { name: 'category' } %>
于 2013-03-28T10:13:08.253 回答
-1

我认为问题在于您与 form_for 一起使用的符号。通常,将对象传递给 form for,因为它将生成正确的路由。

这个问题在这里讨论

当 form_for 使用符号时,fields_for 不起作用

Ruby on Rails:符号作为 form_for 中的参数

于 2013-03-28T10:04:46.460 回答