Rails Проверки на стороне сервера - принадлежат модели - PullRequest
0 голосов
/ 08 марта 2011

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

Вот настройки:

Модель:

class Course < ActiveRecord::Base

 has_many :locations, :dependent => :destroy
 accepts_nested_attributes_for :locations, :allow_destroy => true

end

class Location < ActiveRecord::Base

  belongs_to  :course

  validates_presence_of :city,
                    :message => "City cannot be blank",
                    :allow_blank => true,
                    :if => Proc.new {|location| location.nil? || (!location.nil? && location.course.format != 'Live') } 

end

Что я хотел бы сделать, так это то, что если для курса выбрано что-либо, НО «Живой», то разрешите сохранение пустого города в таблице местоположений. В противном случае, если для файла course.format установлено значение «Live», выведите ошибку.

Я считаю, что он работал над проверкой, где не было определено местоположение. Но при обновлении курса и изменении формата на «Live» проверка не совсем работает.

В рельсах, как вы всегда ссылаетесь на другой столбец в связанной таблице, как у меня выше? Если это новый курс, то этот курс еще не создан, пока проверяются валидации, так что course.nil? верно.

Заранее спасибо!

1 Ответ

0 голосов
/ 08 марта 2011
validates_presence_of :city,
                    :message => "City cannot be blank",
                    :allow_blank => true,
                    :if => Proc.new {|location| location.nil? || (!location.nil? && location.course.format != 'Live') } 

В приведенной выше проверке: allow_blank не имеет отношения к блоку if. Попробуйте вот так

validates_presence_of :city,
                    :message => "City cannot be blank",
                    :if => Proc.new {|location| 'your_conditions'} 

Now this validation works when 'your_condition' will return true.

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