と を持つEvent
モデルがstart_date
ありend_date
ます。end_date
が の後にあることを確認するための簡単な検証がありstart_date
ますが、日付フィールドが変更されていないのに別のフィールドが更新されている場合、検証は失敗し続けます。このような場合、トレースではレコードが適切なフィールド値を示していても、フィールドが nil であると解釈します。
# 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
とが入力されていることを確認しても、検証で (または end_date)を追加すると、コンソールに nil として出力されます。start_date
put start_date
end_after_start