我有一个过滤搜索表单:
<%= form_tag admin_publications_path, method: "get", id: "filter", class: "filter" do %>
<%= label_tag "Category" %>
<%= select "publication", "category", options_for_select(options_for_categories, selected: params[:publication][:category]), {prompt: 'All'}, onchange: "$('#filter').submit();" %>
<% end %>
只要有params [:publication] [:category]可用,就可以正常工作。
但是如果params不可用,例如在没有先前搜索的情况下渲染视图时,我收到错误:
undefined method `[]' for nil:NilClass
有没有办法从视图中检查是否存在参数?
感谢您的帮助,
安东尼
答案 0 :(得分:6)
观看者不应该了解params
。
在控制器(或视图助手)中创建像`
if params[:publication]
@selected = params[:publication][:category]
end
甚至一行
@selected = params[:publication].try(:[], :category)
答案 1 :(得分:2)
你可以这样做:
<% if params[:publication].present? %>
答案 2 :(得分:0)
使用fetch
。当params[:publication]
不存在时,第二个参数将是返回值。
params.fetch(:publication, {})[:category]
请注意,以下内容会引发异常
params = { publication: nil }
params.fetch(:publication, {})[:category] # NoMethodError nil.[]