0
我一直在努力为此寻找正确的方法。 我有一个通过成员资格关联的用户和组之间的多对多关系。Rails 5使用具有多对多关系的代表
成员资格模型还具有反映当前成员资格状态的归属电话“状态”,即与某个组关联的用户可能是青铜,银或金状态。
我一直无法以合理的方式访问状态,没有太多查询,并且认为必须有更高效的方式。我开始与代表,但无法让它工作。
例如这里是代码
user.rb
class User < ApplicationRecord
has_many :memberships
has_many :groups, through: :memberships
end
group.rb
class Group < ApplicationRecord
has_many :memberships
has_many :users, through: :memberships
end
membership.rb
class Membership < ApplicationRecord
belongs_to :user
belongs_to :group
enum status: [ :bronze, :silver, :gold ]
end
现在,在一组的 '秀' 看,我想显示所有成员的用户,所以我这样做:
<% @group.users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.email %></td>
<td><%= user.memberships.find_by_group_id(@group.id).status %></td>
</tr>
<% end %>
这有效,但由于我已经通过组成员关系检索了用户的特定实例,因此如果我可以直接引用该用户的状态而不必再次搜索成员关系,那将会很好。
如果可能的话,也许用一个实例方法或委托,这样我就可以有效地调用user.status
为了避免'N + 1'问题,我会做这个'@groups .memberships.includes(:user).each do' –