Возникли проблемы с: проверено radio_button - рельсы

Прошу прощения за публикацию еще одного вопроса об этом же фрагменте кода, но я такой новичок в рельсах, это больно. У меня вопрос, я бы хотел, чтобы была выбрана третья кнопка-переключатель при наличии значения по умолчанию в БД. Другими словами, у меня есть три кнопки "истина", "ложь" и "либо". Если ничего не выбрано или пользователь выбрал кнопку "либо", я бы хотел, чтобы этот выбор отображался. В настоящее время, если пользователь выбирает "истина" или "ложь", то этот выбор отражается правильно и как ожидалось. Это просто третий выбранный вариант, который не отражается при повторном сохранении или вызове формы. Вот мой код:

<div class="new-partner-form">
<%= form_for [:admin, matching_profile.partner, matching_profile],  :html => {:id => "edit_profile", :multipart => true} do |f| %>
  <div class="rounded-block semi-wide clear">
    <h4>Military Service</h4>
    <%= f.radio_button :served_in_us_army, false %>
    <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %>
    <%= f.radio_button :served_in_us_army, true %>
    <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %>
    <%= f.radio_button :served_in_us_army, " ", { :checked => (:served_in_us_army.nil? or :served_in_us_army.blank? ? true : false) } %>
    <%= label :served_in_us_army, 'Either', {:style => 'display:inline'} %>
    <%= f.error_message_on :served_in_us_army %>
  </div>

РЕДАКТИРОВАТЬ: я должен отметить, что также попробовал ": флажок" вариант без фигурных скобок. Все еще не повезло.

Не уверен, что это лучшее решение, но вот как я решил проблему (мне нужно было значение поля, а не имя столбца):

<div class="rounded-block semi-wide clear">
  <h4>Military Service</h4>
  <%= f.radio_button :served_in_us_army, false %>
  <%= label :served_in_us_army, 'NO', {:style => 'display:inline'} %>
  <%= f.radio_button :served_in_us_army, true %>
  <%= label :served_in_us_army, 'YES', {:style => 'display:inline'} %>
  <%= f.radio_button :served_in_us_army, " ", :checked =>  matching_profile.served_in_us_army.nil? %>
  <%= label :served_in_us_army, "Either", {:style => 'display:inline'} %>
  <%= f.error_message_on :served_in_us_army %>
</div>

1 ответ

Я бы порекомендовал вам не делать этого в представлении. Это бизнес логика.

Попробуйте сделать это в контроллере или даже лучше в модели.

В этом случае вам может потребоваться контроллер для новых и (в частности) действий редактирования и, возможно, создать переменную экземпляра для этой информации. Вы можете выбрать значения из базы данных, добавить опцию вручную, иметь if-then, что угодно, чтобы правильно установить объект.

Лучше всего (всегда) пытаться решить эту проблему на уровне модели. Вы могли бы иметь метод (ы) модели, которые смотрят на существующее значение для военной службы и затем возвращают информацию об этом - даже значение true / false, поскольку булевы значения хороши. Просто убедитесь, что правильно подготовили атрибут (ы) (чтобы он соответствовал БД), прежде чем делать.save

Другие вопросы по тегам