我有一个模型User
和一个模型Band
。它们使用has_many :through
有很多关系,所以我也有BandUser
模型。连接表有几个附加属性,包括一个名为started
的标志。
我有一个特定波段的用户视图呈现列表。每个用户都以部分_user
呈现。在以前的版本中,我有一对多关系,只是将collection: @band.users
传递给render方法,在那里检查sterted?
。由于标志位于另一个表格中,因此我无法实现多对多关系。
那么我应该如何检查视图中连接表中的标志?检查它们的最佳方法是什么?可能会向UserDecorator添加一些方法,例如started_in_band(band)
?
答案 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')
应该这样做