如何确保新实例与最后一个实例不匹配

时间:2012-08-16 09:15:52

标签: ruby-on-rails ruby-on-rails-3.2

我对铁轨上的红宝石很新。我正在使用ruby 1.9.3和rails 3.2.6。我的模型包含有许多Checkins的飞行员。我正在尝试为我的模型添加一些验证,以便飞行员可能不会添加与飞行员最后一次检查相匹配的新签到。

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

我已经在其他情况下测试了自定义相等方法,它似乎工作正常。但是,当我使用上述模型时,即使描述/位置不同,也始终会出现模型错误。

1 个答案:

答案 0 :(得分:0)

在比较运算符中:

if self_compare_id != comparison_compare_id

应该是

if self_compare_id == comparison_compare_id