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
、Iメンバーであるすべてのユーザーを表示したいので、私はこれを行います:
<% @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 %>
これはうまくいきますが、グループメンバーシップを介してユーザーの特定のインスタンスを既に取得しているため、メンバーシップを再度検索する必要はなく、そのユーザーのステータスを直接参照できます。
私はこの '@groupsになるだろう'のn + 1 '問題を回避するために作るuser.status私は効果的に呼び出すことができるように多分、インスタンスメソッドまたはデリゲートを使用して可能な場合.memberships.includes(:user).each do' –