2010-07-02 46 views
4

我有很多一對多的模式,下面的例子中this great railscast驗證一個自我指涉的關聯沒有鏈接回原始實例中軌

我的模型鏈接作者給對方。我想驗證一位作者不能自己寫信。我知道我可以在UI級別處理這個問題,但是我希望有一個驗證來防止UI中的錯誤發生。我試過validates_exclusion_of,但它不起作用。這裏是我的關係模型:

class Friendship < ActiveRecord::Base 
    # prevent duplicates 
    validates_uniqueness_of :friend_id, :scope => :author_id 
    # prevent someone from following themselves (doesn't work) 
    validates_exclusion_of :friend_id, :in => [:author_id] 

    attr_accessible :author_id, :friend_id 
    belongs_to :author 
    belongs_to :friend, :class_name => "Author" 
end 

回答

6

你必須使用自定義的驗證:

class Friendship < ActiveRecord::Base 
    # ... 

    validate :disallow_self_referential_friendship 

    def disallow_self_referential_friendship 
    if friend_id == author_id 
     errors.add(:friend_id, 'cannot refer back to the author') 
    end 
    end 
end 
+0

完美的作品。謝謝! – 2010-07-03 00:25:43

相關問題