Ruby on Rails: используйте form_for для модели и переверните значение формы - PullRequest
6 голосов
/ 20 августа 2010

У меня есть форма form_for, и в ней я использую флажок помощника формы. У модели есть поле, которое имеет логическое значение, но я хотел бы иметь возможность отображать его в моей форме с точки зрения его обратного, поскольку я думаю, что пользователям будет легче его понять.

Можно ли мне как-нибудь использовать вспомогательный метод Rails, как будто булево поле модели перевернуто?

Пример:

<% form_for :user do |form| %>
  <%= form.check_box :privacy_disabled %>
<% end %>

В этом примере модель User имеет логическое поле privacy_disabled. Я хотел бы отобразить это в форме, как отметьте здесь, чтобы включил конфиденциальность.

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

Ответы [ 2 ]

10 голосов
/ 20 августа 2010

Вот так я и решил эту проблему, на самом деле я был близок с первой попыткой:

<%= form.check_box :privacy_disabled, 
                   {:checked => !@user.privacy_disabled}, 
                   0,
                   1 %>

Таким образом, значения, возвращаемые флажком, переворачиваются, и проверяется, запускается ли он, вручную.а также.

6 голосов
/ 20 августа 2010

Не самое элегантное решение, но вы можете сделать что-то вроде следующего:

  1. Добавьте эти методы в вашу модель пользователя:

    def privacy_enabled=(val)
      self.privacy_disabled = val == "0"
    end
    def privacy_enabled
      !privacy_disabled
    end
    
  2. Измените форму на:

    <%= form.check_box :privacy_enabled %>
    

Опять не элегантно, но работает.

...