rails - collection_select выбранное значение, если определено? - PullRequest
15 голосов
/ 15 января 2011

У меня есть следующее:

<%= f.collection_select :role_id, roles, :id, :name, :prompt => true, :selected => 2 %>

Проблема в том, что я хочу, чтобы выбранное значение было только 2, если значение @mission.role_id равно nil.

поэтому я попытался:

<%= f.collection_select :role_id, roles, :id, :name, :prompt => true, {:selected => 2 if @permission.role_id.nil?} %> 

но это разозлило Рельса. Как я могу сделать условие выбранным значением на основе, если отдельная переменная равна нулю или нет?

Спасибо

Ответы [ 5 ]

25 голосов
/ 15 января 2011

хорошо, я думаю, я буду чувствовать себя глупо через 2 минуты, но как насчет

<%= f.collection_select :role_id, roles, :id, :name, prompt: true, @permission.role_id ? {} : {selected: 2 } %>

Причина, по которой ваше решение не работает, заключается в том, что ваш if может вернуть nil, поэтому выглядит примерно так:

<%= f.collection_select :role_id, roles, :id, :name, :prompt => true, {nil} %>

Где {nil} - синтаксическая ошибка

9 голосов
/ 13 февраля 2013

Хотя принятое решение с троичным оператором работает, я не думаю, что оно так же легко читается, как следующее решение:

<%= f.collection_select :role_id, roles, :id, :name, :prompt => true, :selected => @permission.role_id || 2 %>
3 голосов
/ 15 января 2011

поместите это в ваш помощник

def selected(permission)
  if permission.role_id.nil?
    return 2
  else
    .....
  end
end

и это на ваш взгляд

<%= f.collection_select :role_id, roles, :id, :name, :prompt => true, :selected => selected(@permission) %>
0 голосов
/ 31 мая 2016

Я обнаружил, что ответ @ ecoologic у меня не сработал, так как ruby ​​попытался интерпретировать хеш как ключ для последнего аргумента вместо того, чтобы искать в хеш-значениях.

Решением было использование ' знак ».Однако сплиты, похоже, не работают в этом встроенном формате, поэтому я использовал следующее:

<% selected = @permission.role_id ? {} : {selected: 2 } %>
<%= f.collection_select :role_id, roles, :id, :name, prompt: true, **selected %>
0 голосов
/ 15 января 2011

Проблема в том, что вы не можете иметь if в этой позиции.Итак, первое решение, хотя и немного некрасивое, выглядит примерно так:

<% if @permission.role_id.nil? %>
  <%= f.collection_select :role_id, roles, :id, :name, :prompt => true, {:selected => 2} %>
<% else %>
  <%= f.collection_select :role_id, roles, :id, :name, :prompt => true %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...