因此,在第12章或Hartl的Railstutorial中,我们正在构建用户能够跟随彼此的“推特”提要的能力。这被建模为用户形成关系,我们使用具有follower_id和followed_id的表创建关系模型。同样在模型中,我们将其与用户模型关联如下:
class Relationship < ActiveRecord::Base
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
我们还将用户模型与关系模型相关联,如下所示:
class User < ActiveRecord::Base
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
has_many :passive_relationships, class_name: "Relationship",
foreign_key: "followed_id",
dependent: :destroy
has_many :following, through: :active_relationships, source: :followed
has_many :followers, through: :passive_relationships, source: :follower
我很困惑为什么我们需要在用户模型中使用has_many:follow。它在教程中说跟随某人是一个积极的关系,那么为什么我们需要说用户有很多活跃的关系,而且用户也跟随很多(这是一种积极的关系)。具体是什么has_many:在执行has_many之后:active_relationships无法做到?
另外我的第二个问题是为什么将belongs_to拆分为跟随者并跟随,而不仅仅是用户。通过在用户上使用两个belongs_to而不是一个来获得什么?
答案 0 :(得分:1)
这是一种访问Users
的方式,它跟随或被特定用户跟随,而不是关系。
如果您只有@user.active_relationships
,则会返回连接表中的关系。但是使用@user.following
,您将获得User
个对象的关联数组。
至于你的第二个问题,两个用户之间的关系需要两个对象而不是一个,而只有一个belongs_to :user
毫无意义。