我在一个自我引用的模型中有很多关系。在连接表中,我还有一个额外的列,用于定义关系的来源。在向该关系添加新对象时,我希望根据user_id,friend_id和source_id
避免连接表中的重复项用户模型
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。
我知道有几种方法可以实现这一点,但我对rails上的ruby很新,我正在寻找“轨道方式”来实现它。
答案 0 :(得分:2)
您可以根据中间表中的多个列进行验证,如下所示:
validates_uniqueness_of :user_id, :scope => [:friend_id, :source_id]