使用 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
我有一个项目管理应用程序,它有 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