2013-11-14 6 views
0

У меня есть в моей модели этих два полей - recurring_interval и recurring_time - где мне нужно, чтобы проверить, что эти два поля будут созданы оба или ни один из них.Условная валидация в Rails

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

Как это сделать?

ответ

0

Вы можете добавить пользовательскую проверку:

class MyModel 
    ... 
    validate :verify_recurring_stuff 
    .. 

    private 
    def verify_recurring_stuff 
    ri = self.recurring_interval 
    rt = self.recurring_time 

    if ri.blank? != rt.blank? 
     self.errors.add(:base, 'Your error message') 
    end 
    end 
end 
+0

Я пробовал, но даже если я установил только одно значение, форма отправляется, сообщение об ошибке не отображается. – user984621

+0

Поделитесь своей формой и действием контроллера. – cortex

+0

Привет, Cortex, я частично его обработал, но есть одна проблема - когда я отправил форму, контроллер получает «recurring_time (1i)» => «1», «recurring_time (2i)» => «1», "recurring_time (3i)" => "1", "recurring_time (4i)" => "", "recurring_time (5i)" => ""} ', что означает, что проверка всегда вызывает ошибку - как проверять только часы и минут? – user984621

0
class User < ActiveRecord::Base 
    validates_with Recurring_validator 
end 

class RecurringValidator < ActiveModel::Validator 
    def validate(record) 
    if record.recurring_interval.blank? != record.recurring_time.blank? 
     record.errors[:base] << "Error message" 
    end 
    end 
end 

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

Смежные вопросы