2017-02-28 2 views
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 %> 

これはうまくいきますが、グループメンバーシップを介してユーザーの特定のインスタンスを既に取得しているため、メンバーシップを再度検索する必要はなく、そのユーザーのステータスを直接参照できます。

答えて

0

が、それは簡単な

<% @group.memberships.each do |membership| %> 
    <tr> 
    <td><%= membership.user.id %></td> 
    <td><%= membership.user.email %></td> 
    <td><%= membership.status %></td> 
    </tr> 
<% end %> 
+1

私はこの '@groupsになるだろう'のn + 1 '問題を回避するために作るuser.status私は効果的に呼び出すことができるように多分、インスタンスメソッドまたはデリゲートを使用して可能な場合.memberships.includes(:user).each do' –

関連する問題