私はRuby on Railsにかなり慣れていません。Ruby 1.9.3 と Rails 3.2.6 を使用しています。私のモデルには、多くのチェックインを持つパイロットが含まれています。パイロットが行った最後のチェックインと一致する新しいチェックインをパイロットが追加しないように、モデルに検証を追加しようとしています。
class Checkin < ActiveRecord::Base
belongs_to :pilot
...
validate :must_not_match_last_checkin
def ==(comparison_checkin)
self_compare_id = checkin_compare_id self
comparison_compare_id = checkin_compare_id comparison_checkin
if self_compare_id != comparison_compare_id
return true
else
return false;
end
end
private
def must_not_match_last_checkin
if self == self.pilot.checkins.last
errors.add(:base, "Checkin is only valid if it differs from your previous checkin")
end
end
def checkin_compare_id checkin
diff = ""
if !checkin.nil?
diff = checkin.location + checkin.description
end
return diff
end
end
他の状況でカスタムの等価メソッドをテストしましたが、うまく機能しているようです。ただし、上記のモデルを使用すると、説明/場所が異なっていても、常にモデル エラーが発生します。