2013-05-13 1 views
0

У меня есть модель с атрибутом даты. Я построил пользовательскую проверку с использованием [attribute] _before_type_cast, так что дата, например «31 .02.2013», приведет к отказу проверки.Показывать недопустимый атрибут перед типом cast

Проблема заключается в том, что:

@invoice.order_date = '31.02.2013' 
@invoice.order_date #=> Sun Mar 03 00:00:00 +0100 2013 

Так на пользователя вид слоя получает сообщение о недопустимой дате, но недействительный атрибут автоматически изменяется на 03.03.2013, которая Infact правильная дата, так что это своего рода не -смысл.

Есть ли способ остановить этот type_cast и отобразить этот атрибут с недопустимой датой?

+0

Какой смысл отмечать его как недействительный, если он действительно работает? – alf

+0

Валидация работает. Однако пользователь видит сообщение об ошибке о неверной дате, но дата в текстовом поле верна. Благодаря механизму конвертации даты Ruby. –

+0

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

ответ

1

Я думаю, вы можете создать собственный метод setter, чтобы предотвратить изменение атрибута.

def order_date=(date) 
    date = your_validate_and_format_method(date) 
    self.send(:write_attribute, :order_date, date) 
end 

В your_validate_and_format_method вы можете сделать что-то вроде валидации, формат, и вы можете определить, сохранить старое значение или использовать новый.

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