Rails: Какой хороший способ справиться с пустым массивом params - PullRequest
0 голосов
/ 24 ноября 2010

В одном из моих представлений у меня есть форма, которая будет отправлять данные на контроллер.

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

С сообщением об ошибке:

У вас есть нулевой объект, когда вы этого не сделали ожидайте этого! Вы могли ожидать экземпляр массива. Произошла ошибка при оценке ноль. []

Какой хороший, читаемый способ получить пустой массив, если params [: user] не сгенерирован?

Заранее спасибо за любые предложения.

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Как насчет

@user.relevant_committee_ids = params[:user] ? params[:user][:relevant_committee_ids] : [] 
0 голосов
/ 24 ноября 2010

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

0 голосов
/ 24 ноября 2010

Моя попытка будет: params[:user] ||= [] @user.relevant_committee_ids = params[:user][:relevant_committee_ids] @user.relevant_committee_ids ||= []

Обычно я нахожу достаточно читабельным для использования синтаксиса x ||= [] везде, и я должен подчеркнуть, что я заменяю пустую коллекцию значением nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...