0

我在一个自引用的模型中有很多直通关系。在连接表中,我还有一个额外的列来定义关系的来源。向该关系添加新对象时,我想避免基于 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 的连接不存在。

我知道有几种方法可以做到这一点,但我对 ruby​​ on rails 还是很陌生,我正在寻找“rails 方式”来做到这一点。

4

1 回答 1

2

您可以根据中间表中的多个列进行验证,如下所示:

  validates_uniqueness_of :user_id, :scope => [:friend_id, :source_id]
于 2013-03-27T13:55:23.083 回答