Rails:处理空params数组的好方法是什么

时间:2010-11-24 10:04:53

标签: ruby-on-rails ruby-on-rails-3

在我的一个视图中,我有一个将数据发送到控制器的表单。

<%= form_for @user do |f| %>
  <%= f.error_messages %>

<% for committee in @committees %>
  <div>
    <%= check_box_tag "user[relevant_committee_ids][]", committee.id, @user.relevant_committees.include?(committee) %>
    <%= committee.name %>
  </div>

<% end %>
  <%= f.submit t(:save_settings) %>
<% end %>

如果表单为空,则不会生成params [:user],这会导致控制器中的以下代码失败:

@user.relevant_committee_ids = params[:user][:relevant_committee_ids] ||= [] 

显示错误消息:

  

当你没有时,你有一个零对象   期待它!你可能已经预料到了   数组的实例。发生错误   同时评估nil。[]

如果没有生成params [:user],获取空数组有什么好的,可读的方法?

提前感谢任何建议。

3 个答案:

答案 0 :(得分:1)

怎么样

@user.relevant_committee_ids = params[:user] ? params[:user][:relevant_committee_ids] : [] 

答案 1 :(得分:0)

我的尝试是:

params[:user] ||= []
@user.relevant_committee_ids = params[:user][:relevant_committee_ids]
@user.relevant_committee_ids ||= []

一般来说,我觉得在任何地方使用x ||= []语法都足够可读,我必须强调我将空集合替换为nil值。

答案 2 :(得分:0)

@user.relevant_committee_ids = params[:user].try(:[], :relevant_committee_ids) || []