在我的一个视图中,我有一个将数据发送到控制器的表单。
<%= 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],获取空数组有什么好的,可读的方法?
提前感谢任何建议。
答案 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) || []