【发布时间】:2017-02-28 20:51:38
【问题描述】:
我一直在努力寻找正确的方法。 我在通过会员资格关联的用户和组之间建立了多对多关系。
Membership 模型还有一个属性调用“status”,它反映了当前的会员状态,即与某个组相关联的用户可能是青铜、白银或黄金状态。
在没有大量查询的情况下,我无法以合理的方式访问状态,并且认为必须有更有效的方式。我从代表开始,但无法让它发挥作用。
例如这是代码
用户.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
【问题讨论】:
标签: ruby-on-rails activerecord delegates