0

私は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

他の状況でカスタムの等価メソッドをテストしましたが、うまく機能しているようです。ただし、上記のモデルを使用すると、説明/場所が異なっていても、常にモデル エラーが発生します。

4

1 に答える 1

0

比較演算子で:

if self_compare_id != comparison_compare_id

本当にあるべき

if self_compare_id == comparison_compare_id
于 2012-08-16T10:54:53.953 に答える