提交搜索后保留搜索结果(rails)

时间:2011-11-16 06:36:06

标签: ruby-on-rails search select submit

我想这样做,以便在用户提交搜索后,他们选择的选项会在搜索表单的重新加载时保持选中状态。这是我的代码之一:

    <div><%= f.select :tod_like, Course.tod_array, {:include_blank => true, :selected => params[:search][:tod_like], :class=>"float_and_margin"} %></div>

关键代码是

:selected => params[:search][:tod_like]

当我刷新页面时,出现以下错误:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

我知道我收到了这个错误,因为params [:search] [:tod_like]是空白的。如何设置:如果用户尚未提交表单,则选择此选项以使其为空白,但是提交是否为空?我尝试使用三元运算符,但这不起作用。

谢谢!

2 个答案:

答案 0 :(得分:0)

params键是否正确?

我认为表格f是一个课程实例,所以不会像

那样

@course.tod_like = params[:search][:tod_like] ? params[:search][:tod_like] : ""

在生成搜索功能的函数的顶部(您已经提到过您尝试过三元语句,但是您是否同时替换了:selected选项?

然后:选择=&gt;选择标签中的@ course.tod_like?

<div><%= f.select :tod_like, Course.tod_array, {:include_blank => true, :selected => @course.tod_like, :class=>"float_and_margin"} %></div>

答案 1 :(得分:0)

嗯,我最后通过在我的课程控制器中定义一个三元运算符,然后将此实例变量传递到适当的视图来解决此问题。

@tod_results = params[:search] == nil ? :blank : params[:search][:tod_like]

<div><%= f.select :tod_like, Course.tod_array, {:include_blank => true, :selected => @tod_results, :class=>"float_and_margin"} %></div>

这段代码与之前尝试的三元运算符的主要区别在于我正在测试params [:search]是否为nil,而不是params [:search] [:tod_like]是否为nil。因为params [:search]已经是nil了,所以当我尝试使用params [:search] [:tod_like]时,我得到了“你正在期待一个数组,但是得到了nil”错误。

感谢您的回复!