2013-03-27 68 views
0

我有一個在自引用的模型中有很多直通關係。在連接表中,我還有一個額外的列來定義關係的來源。當添加一個新的對象到關係我想避免的基礎上user_ID的連接表副本,friend_id和SOURCE_ID如何在Ruby on Rails中驗證連接表的額外列的唯一性

用戶模型

class User < ActiveRecord::Base 
     has_many :friendships 
     has_many :friends, :class_name => "User", :through => :friendships 
end 

加入型號

class Friendship < ActiveRecord::Base 
    attr_accessible :friend_id, :user_id, :source_id, :alert, :hide 

    # Relationships 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
    has_one :source 
end 

我知道我能做到這一點

unless user.friends.include?(newFriend) 
     user.friendships.build(:friend_id => friendUser.id, :source_id => source.id) 
end 

但是,好像它會檢查,看看是否新用戶存在於當前用戶的朋友中。我需要檢查連接模型級別並確保連接不存在於給定的源ID中。

我知道有幾種方法可以做到這一點,但我對軌道上的ruby非常陌生,並且正在尋找「rails方式」來實現它。

回答

2

您可以驗證基於多個列的中間表是這樣的:

validates_uniqueness_of :user_id, :scope => [:friend_id, :source_id] 
+0

優秀。這會給我一個保存錯誤嗎?或者只是不保存重複的記錄? – smokingoyster 2013-03-27 13:57:10

+0

如果您嘗試保存它,它應該會給您和錯誤。 – Zippie 2013-03-27 13:57:42

+0

那會靜靜地死去嗎?或者我每次救人時都必須開始救援? – smokingoyster 2013-03-27 14:00:24

相關問題