如何在多对多关系中访问连接表中的属性?

时间:2015-07-06 14:33:24

标签: ruby-on-rails ruby activerecord

我有一个模型User和一个模型Band。它们使用has_many :through有很多关系,所以我也有BandUser模型。连接表有几个附加属性,包括一个名为started的标志。

我有一个特定波段的用户视图呈现列表。每个用户都以部分_user呈现。在以前的版本中,我有一对多关系,只是将collection: @band.users传递给render方法,在那里检查sterted?。由于标志位于另一个表格中,因此我无法实现多对多关系。

那么我应该如何检查视图中连接表中的标志?检查它们的最佳方法是什么?可能会向UserDecorator添加一些方法,例如started_in_band(band)

2 个答案:

答案 0 :(得分:0)

您可能希望将BandUser模型重命名为更具描述性的模型,例如Membership

class Membership < ActiveRecord::Base
  belongs_to :band
  belongs_to :user
end

class Band < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships
end

class User < ActiveRecord::Base
  has_many :memberships
  has_many :bands, through: :memberships
end

然后,您可以使用band.users直接与用户联系,或band.memberships转到您的started和其他属性所在的会员资料数据。

关键是您需要与中间模型建立单独的has_many关系。

答案 1 :(得分:0)

band.users.where('bandusers.started IS NOT NULL') 

应该这样做