在第12章的Hartl铁路教程中对数据模型感到困惑

时间:2015-12-01 22:03:13

标签: ruby-on-rails ruby railstutorial.org

因此,在第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而不是一个来获得什么?

1 个答案:

答案 0 :(得分:1)

这是一种访问Users的方式,它跟随或被特定用户跟随,而不是关系。

如果您只有@user.active_relationships,则会返回连接表中的关系。但是使用@user.following,您将获得User个对象的关联数组。

至于你的第二个问题,两个用户之间的关系需要两个对象而不是一个,而只有一个belongs_to :user毫无意义。

Ruby on Rails Guides - Associations | Has many :through