Условная проверка Ruby on Rails ActiveRecord (и многое другое ..) - PullRequest
1 голос
/ 18 марта 2009

У меня есть модель Product , которая проверяет несколько атрибутов (включая прикрепление изображения к скрепке), например:

validates_presence_of :name
validates_format_of :name, :with => /^([a-zA-Z0-9\ \-]{3,128})$/i
...
has_attached_file :image

validates_attachment_presence :image
validates_attachment_content_type :image, :content_type => ["image/jpeg", "image/png", "image/gif"]

Все работает нормально. Теперь я хочу создать (ненавязчивый) скрытый сценарий загрузки на месте iframe с использованием javascript. Моя проблема заключается в том, что я не могу просто загрузить изображение без остальных данных, потому что оно не пройдет проверку (имя не указано), а также я не могу отправить оставшуюся форму без изображения (то же самое, не проходит проверку).

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

Надеюсь, я был достаточно ясен. Любая помощь приветствуется. Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 октября 2009

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

Чтобы проверить наличие пароля только для действия create, сделайте следующее:

validates_presence_of :password, :on => :create
3 голосов
/ 18 марта 2009

Railscasts есть хороший видео-скринкаст об условных проверках.

0 голосов
/ 07 апреля 2011

Комментарий для Питера Д.

Большое спасибо. Я не могу сейчас смотреть этот ролик (хотя планирую) и искал быстрый, краткий ответ.

Включил ваше предложение в модель, которая у меня есть, и она отлично работает. (Хотя я подозреваю, что в какой-то момент мне понадобится проверка при обновлении при смене паролей. Теперь я приму это как «технический долг», чтобы двигаться дальше.)

Бит, который я добавил:

validates :password, :presence => true, :confirmation => true, :on => :create
...