使用 has_many 通过以下方式查询当前和以前的关系:在 Rails

querying current and previous relationships using has_many through: in Rails

我有一个项目管理应用程序,它有 3 个模型…项目、用户和参与。我希望能够显示在给定用户参与的任何项目中与给定用户合作的所有用户的列表。这包括过去的项目。

例如 UserA 和 UserB 在 ProjectBlue UserA 和 UserC 在 ProjectYellow 中 UserA & UserC & UserD 在 ProjectRed

如果我在 UserA 的仪表板中,我希望能够看到一个列表:

“您曾与: UserC(只列出一次) 用户D 用户 B”

我是否需要为每个共享连接创建一个完整的 :relationships Table 和 :user_id, :project_id, 记录?这看起来效率不高。

型号

Class Project < ActiveRecord::Base
  belongs_to :user # (this is the organizer)
  has_many :users, through: :participants
  has_many :participants

Class User < ActiveRecord::Base 
  has_many :projects
  has_many :project, through :participant
  has_many :participants

Class Participant < ActiveRecord::Base
  belongs_to :project
  belongs_to :user

这是正确的方法。数据库space是免费的,反正数据库很无聊。它会很高兴使用一些数据。 ;-)

查看 http://www.xyzpub.com/en/ruby-on-rails/4.0/ar-many_to_many.html 中的一些示例。

但我不确定你的模型。他们看起来确实有点奇怪。你可能想要:

Class Project < ActiveRecord::Base
  belongs_to :user # (this is the organizer)
  has_many :participants
  has_many :users, through: :participants

Class User < ActiveRecord::Base 
  has_many :participants
  has_many :projects, through: :participants

Class Participant < ActiveRecord::Base
  belongs_to :project
  belongs_to :user