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

params[:categories][:category]フォームがそのように設定されているため、カテゴリ ID が含まれていることを期待する必要があります。を使用する場合はparams[:category]、 name オプションをに渡しますselect

<%= f.select :category, Categories.all.map{ |u| [u.name, u.id] }, { :prompt => "Select a category" }, { name: 'category' } %>

それはさておき、collection_selectActiveRecord テーブルを扱っている場合に使用する方が良いと思います

<%= 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 に答える