使用组合键进行 Rails 验证



>我有一个用户模型,其中包含多对多自连接表,如下所示

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

简而言之,用户可以拥有许多关注者,并且可以关注许多用户。当用户 A 跟随用户 B 时,将创建关系记录,其中 user_1 = 用户 A 和 user_2 = 用户 B。

我需要实现唯一性验证,以确保用户 A 和用户 B 之间仅存在一条记录。因此,如果记录存在

user_1 == UserA AND user_2 == UserB 

那么在

Either
user_1 == UserA and user_2 == UserB 
OR
user_1 == UserB and user_2 == UserA

编写自定义验证器以检查唯一性。

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

相关内容

  • 没有找到相关文章

最新更新