我的用户模型具有多对多的自联接表,如下所示
class User < ActiveRecord::Base
has_many :follower_relationships, foreign_key: :user_2_id, class_name: 'Relationship'
has_many :followee_relationships, foreign_key: :user_1_id, class_name: 'Relationship'
has_many :followers_all, through: :follower_relationships, source: :user_1
has_many :followees_all, through: :followee_relationships, source: :user_2
使用以下模型创建联接
class Relationship < ActiveRecord::Base
belongs_to :user_1, class_name: 'User', foreign_key: :user_1_id
belongs_to :user_2, class_name: 'User', foreign_key: :user_2_id
简而言之,一个用户可以有很多关注者,并且可以关注很多用户。当UserA跟随UserB时,将创建一个关系记录,其中user_1 = UserA,而user_2 = UserB。
我需要实施唯一性验证,以确保UserA和UserB之间仅存在一条记录。因此,如果记录存在
user_1 == UserA AND user_2 == UserB
然后
不应存在其他关系Either
user_1 == UserA and user_2 == UserB
OR
user_1 == UserB and user_2 == UserA
答案 0 :(得分:0)
编写自定义验证器以检查唯一性。
class Relationship < ActiveRecord::Base
...
validate :follow_unique_users
def follow_unique_users
if where('(user_1_id = :user_1_id and user_2_id = :user_2_id) or (user_1_id = :user_2_id and user_2_id = :user_1_id)', {user_1_id: <user_1_id>, user_2_id: <user_2_id>}).exist?
errors.add(:base, "error message")
end
end
end