【问题标题】:Rails: What's a good way to deal with empty params arrayRails:处理空参数数组的好方法是什么
【发布时间】:2010-11-24 10:04:52
【问题描述】:

在我的一个观点中,我有一个可以将数据发送到控制器的表单。

<%= 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 对象 期待它!你可能已经预料到了 数组的实例。发生错误 在评估 nil 时。[]

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

提前感谢您的任何建议。

【问题讨论】:

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


    【解决方案1】:

    怎么样

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

    【讨论】:

      【解决方案2】:

      我的尝试是:

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

      一般来说,我发现它的可读性足以在任何地方使用x ||= [] 语法,我必须强调我用空集合代替了 nil 值。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-09-08
          • 2019-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-12
          • 2019-06-17
          • 2011-03-20
          相关资源
          最近更新 更多