-5

基本上,我有一个包含两列的表,一个跟随者和一个跟随者。如果 user1 跟随 user2,我需要确保 user2 不能跟随 user1。我在模型中写什么来验证这一点?

我有一个用户模型,每个模型都有一个 id。我还创建了一个新的关系模型,其中有两列。

这就是我所在的地方。

class Relationship < ActiveRecord::Base
attr_accessible :followed_id, :follower_id

belongs_to :followed, class_name: "User"
belongs_to :follower, class_name: "User"

validates :followed_id, presence: true
validates :follower_id, presence: true
validates :verify_no_circular_requirements

private
  def verify_no_circular_requirements
    return true
  end
end
4

1 回答 1

1

您可以编写一个自定义验证器函数:

例如(假设您有一个 follow_users 方法,它返回当前用户正在关注的所有用户,以及一个 follow 方法,采用用户 ID 并“关注此用户。):

class User < ActiveRecord::Base

    has_many :users, inverse_of :user, as: followed_users
    validates :verify_no_circular_followers

    def followed
       followed_users
    end

   def follow(user_id)
      followed_users << User.find(user_id)
   end

   private
      def verify_no_circular_followers
          followed_users.each do |u|
             if u.index(self)
                return false
             end
          end
          return true
      end
end
于 2013-08-08T23:59:21.157 回答