我想这样做,以便在用户提交搜索后,他们选择的选项会在搜索表单的重新加载时保持选中状态。这是我的代码之一:
<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]是空白的。如何设置:如果用户尚未提交表单,则选择此选项以使其为空白,但是提交是否为空?我尝试使用三元运算符,但这不起作用。
谢谢!
答案 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”错误。
感谢您的回复!