我已经构建了一个这样的表单搜索:
<%= 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 %>
我想搜索从选择框中选择的主题的所有问题,我使用太阳黑子来帮助搜索,所以现在我如何将选择框中的值选择传递给控制器进行搜索,我使用下面的代码来传递参数[ :搜索]:
<%= 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
那么,如何将从表单上的选择框中选择的值传递给控制器进行搜索?
答案 0 :(得分:3)
嘿,没有必要通过params [:search]
当单击提交按钮时,Rails会自动生成用于选择的参数。
如果您想将名称参数设置为“搜索”,则将选择“搜索主题”的名称更改为“搜索”。
如果你想检查params的值,那么它如何在params中接收,尝试调试器并检查由该形式生成的params的值。
此外,还有一个快捷方式,尝试在按下提交后要调用的操作中输入错误,并在浏览器页面上读取params。您也可以在下一页用闪光灯打印
答案 1 :(得分:3)
<%= select_tag 'search_topic',
options_from_collection_for_select(current_user.get_topics, :id, :name) %>
这假定显示的视图代码在表单内。如果该表单发布,则最终在创建操作中说:
params[:search_topic]
包含您选择的值。