基本上,我有一个有两列的表,一个跟随者和一个跟随。如果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
答案 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