如何在模型中停止循环“追随者”?

时间:2013-08-08 23:49:26

标签: ruby-on-rails validation model

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

我有一个User模型,每个人都有一个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

1 个答案:

答案 0 :(得分: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