Использование Rails помощников форм на несуществующих методах - PullRequest
4 голосов
/ 19 февраля 2010

Обычно при использовании помощников форм в Rails каждое поле напрямую соотносится с методом соответствующего объекта.

Однако у меня есть форма (регистрация пользователя), которая должна включать поля, которые не являются частьюсама модель пользователя (например, данные карты), но должна появиться.

Как я могу построить форму, чтобы я мог получить необходимые поля и проверить их, как мне нужно (чтобы она соответствовалавсе мои другие проверки) без загрязнения моей пользовательской модели?

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Я не уверен, что вы имеете в виду, говоря о "загрязнении" вашей пользовательской модели, но вы можете сделать это, используя метод attr_accessor .Это позволит вам создать атрибут для модели, который можно использовать для проверок:

class Widget < ActiveRecord::Base
  attr_accessor :confirmation_email
  validates_length_of :confirmation_email, :within => 1..10
end

Чтобы запускать проверку только в определенное время, вы можете использовать условие :if:

validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }

Вы также можете использовать метод класса, например: :if => :payment_complete.С их помощью вы сможете достичь желаемой функциональности.Насколько я знаю, нет более краткого пути.

1 голос
/ 19 февраля 2010

У Иегуды Каца есть отличное объяснение того, как вы можете использовать ActiveModel, чтобы сделать произвольный класс совместимым с помощниками форм Rails. Это работает, только если вы на Rails 3.

Если вы не живете на переднем крае, посмотрите Railscasts эпизод 193, "Tableless Model" , который описывает, как вы можете создать класс, который крякает достаточно, например ActiveRecord::Base, чтобы он работал с form_for.

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