У меня есть модель Event
, которая имеет start_date
и end_date
. У меня есть простая проверка, чтобы убедиться, что end_date
после start_date
, однако, проверка не выполняется, когда поле даты не изменяется, но другое поле обновляется. В таких случаях он интерпретирует, что поля равны нулю, хотя в трассировке запись показывает правильные значения полей.Rails Думает, что поле - это ниль, когда оно не должно
# error
undefined method `<' for nil:NilClass
app/models/event.rb:32:in `end_after_start'
# validation in event.rb
attr_accessible :end_date, :start_date
validate :end_after_start
def end_after_start
if end_date < start_date
errors.add(:end_date, "must be after the start date")
end
end
# request parameters in trace
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"DD6rVimJxAJclO4IKfv69Txn8XkJZ4IpHZhh+cHOpg4=",
"event"=>{"name"=>"Birthday",
"start_date"=>"05/16/2013",
"end_date"=>"05/31/2013",
"commit"=>"Submit",
"id"=>"5"}
# _form
<%= f.text_field :start_date, :value => (@event.start_date.strftime("%m/%d/%Y") if @event.start_date.present?) %>
<%= f.text_field :end_date, :value => (@event.end_date.strftime("%m/%d/%Y") if @event.end_date.present?) %>
Даже если я вижу end_date
и start_date
заселена в параметрах трассировки, если добавить put start_date
(или END_DATE) в проверке end_after_start
, он печатает в ноль на консоли.
Какой контроллер выглядит? –