2009-03-18 2 views
1

У меня есть продукт модель, которая проверяет несколько атрибутов (в том числе вложения изображения Paperclip) как так:Рубин на Rails ActiveRecord условной проверки (и больше ..)

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

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

+0

Теперь, интересно, как я этого не нашел, потому что я * сказал * условную проверку. Я бы посмотрела на него и вернулась к тебе. Благодаря! – andi

+0

Это было то, что мне нужно. Благодарю. – andi

3

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

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

validates_presence_of :password, :on => :create 
+2

«Мне очень не нравится пробираться по видео» <- Вы можете использовать сайт сестры asciicasts.com – 2011-08-22 12:18:51

0

комментарий для Peter D.

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

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

Добавленный бит :

validates :password, :presence => true, :confirmation => true, :on => :create 
Смежные вопросы