我正在尝试表示我的应用程序中的用户之间的关系,其中用户可以拥有许多关注者并且可以关注其他用户。 我想要像user.followers()和user.followed_by()这样的东西 您能否详细告诉我如何使用ActiveRecord表示这一点?
感谢。
答案 0 :(得分:34)
你需要两个模型,一个人和一个跟随
rails generate model Person name:string
rails generate model Followings person_id:integer follower_id:integer blocked:boolean
以及模型中的以下代码
class Person < ActiveRecord::Base
has_many :followers, :class_name => 'Followings', :foreign_key => 'person_id'
has_many :following, :class_name => 'Followings', :foreign_key => 'follower_id'
end
并在您编写的Followings类中对应
class Followings < ActiveRecord::Base
belongs_to :person
belongs_to :follower, :class_name => 'Person'
end
你可以根据自己的喜好使名字更清晰(我特别不喜欢Followings
- 名字),但这应该让你开始。
答案 1 :(得分:2)
Twitter关注者模型与友谊模型的不同之处在于,您无需获得该人员的许可即可关注它们。在这里,我设置了一个延迟加载,其中关系未在person对象中完全定义。
/app/models/person.rb
def followers
Followership.where(:leader_id=>self.id).not_blocked
end
def following
Followership.where(:follower_id=>:self.id).not_blocked
end
has_many :followers, :class_name=>'Followership'
has_many :followed_by, :class_name=>'Followership'
/app/models/followership.rb
belongs_to :leader, :class_name=>'Person'
belongs_to :follower, :class_name=>'Person'
#leader_id integer
#follower_id integer
#blocked boolean
scope :not_blocked, :conditions => ['blocked = ?', false]