возникли проблемы с: проверено radio_button - рельсы - PullRequest
1 голос
/ 23 ноября 2011

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

<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 Ответ

1 голос
/ 23 ноября 2011

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

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

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

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

...