如何在视图中检查存在参数

时间:2014-08-07 07:52:40

标签: ruby-on-rails ruby

我有一个过滤搜索表单:

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

有没有办法从视图中检查是否存在参数?

感谢您的帮助,

安东尼

3 个答案:

答案 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.[]