2012-01-04 2 views
2

так у меня есть модель с двумя датой атрибутыпроверки в рельсах с двумя даты атрибуты

# migration 
    t.date :valid_from 
    t.date :valid_until 

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

лучшее место для проверки этого, находится внутри модели с валидатором, не так ли? Я думаю, что контроллер не будет лучшим местом для этого.

Как это можно сделать с помощью валидатора внутри моей модели? Я попробовал несколько вещей без везения.

ответ

3

Вы можете использовать собственный валидатор:

validate :valid_date_range_required 

def valid_date_range_required 
    if (valid_from && valid_until) && (valid_until < valid_from) 
    errors.add(:valid_until, "must be later than valid_from") 
    end 
end 
+0

хороший, в то время как googling я не нашел пример с определением простого метода внутри моего объекта, все они касались подклассификации валидатора. отлично работает, спасибо! – choise

0

Если вы окажетесь того, чтобы проверяет много дат, вы можете захотеть добавить date validator камень! Это дает вам хороший синтаксис и, возможно, всю необходимую гибкость.

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