4

私は次のようなフォーム検索を作成しました:

<%= form_tag({ controller: 'questions', action: 'search_topic' }, method: 'get') do %>
  <%= select_tag 'search_topic', options_from_collection_for_select(current_user.get_topics, :id, :name) %>
  <%= submit_tag "Search", name: nil, class: 'btn' %>
<% end %> 

選択ボックスから選択したトピックのすべての質問を検索したいので、検索を支援するために黒点を使用しました。次に、選択ボックスから検索用のコントローラーに値選択を渡すにはどうすればよいですか。以下のコードを使用してparams [:search]を渡します。 :

<%= select_tag 'search_topic', options_from_collection_for_select(current_user.get_topics, :id, :name), params[:search] %>

しかし、エラーがあります:

undefined method `[]' for nil:NilClass

これは私のコントローラーです:

def search_topic
  @search = Question.search do
    with(:topic_id, params[:search])
    paginate page: 1, per_page: 10
  end

  @questions = @search.results
  render 'index'
end

では、フォームの選択ボックスから選択した値を検索用のコントローラーに渡すにはどうすればよいですか?

4

2 に答える 2

4
<%= select_tag 'search_topic', 
  options_from_collection_for_select(current_user.get_topics, :id, :name) %>

これは、表示されているビューコードがフォーム内にあることを前提としています。そのフォームが投稿された場​​合、作成アクションで次のようになります。

params[:search_topic]

選択した値が含まれています。

于 2012-11-02T18:59:25.037 に答える
3

params [:search]を渡す必要はありません。
Railsは、送信ボタンがクリックされたときに選択するためのパラメータを自動的に生成します。

paramsnameを'search'にしたい場合は、select'search-topic'の名前を'search'に変更します。

paramsの値を確認したい場合は、paramsでどのように受信するかを確認し、デバッガーを試して、このフォームによって生成されたparamsの値を確認してください。

また、ショートカットがあり、送信を押した後に呼び出されるアクションにエラーを入れて、ブラウザページのパラメータを読んでみてください。また、次のページでフラッシュで印刷することができます

于 2012-11-02T18:56:25.100 に答える