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

我想搜索从选择框中选择的主题的所有问题,我使用 sunspot 来帮助搜索,所以现在我如何将值选择从选择框传递到控制器进行搜索,我使用下面的代码来传递参数 [: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

嘿,不需要传递参数 [:search]。
当单击提交按钮时,Rails 会自动生成选择参数。

如果要将参数名称设置为“搜索”,则将选择“搜索主题”的名称更改为“搜索”。

如果要检查参数的值,它将如何在参数中接收,请尝试调试器并检查此表单生成的参数的值。

另外,还有一个快捷方式,在按下提交后尝试在要调用的动作中放入错误,并在浏览器页面上读取参数。您也可以在下一页上快速打印

于 2012-11-02T18:56:25.100 回答