2012-08-16 72 views
0

我對Ruby on Rails相當陌生。我正在使用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 

我測試過在其他情況下定製平等法,它似乎很好地工作。但是,當我使用上述模型時,即使描述/位置不同,也會出現模型錯誤。

回答

0

在您的比較操作:

if self_compare_id != comparison_compare_id 

確實應該

if self_compare_id == comparison_compare_id 
+0

對不起,這是我的一個位失效,以爲我已經檢查了所以忽略了它。謝謝你的新鮮眼睛。爲了他人傳球的好處,我最終將其改爲返回self_compare_id == comparison_compare_id – ClearCarbon 2012-08-16 14:02:02