2016-03-21 5 views
0

Ich habe 3 ModelleEinzigartige Liste durch eine has_many Beziehung

class User < ActiveRecord::Base 
    has_many :teams, :through => :team_memberships 
    has_many :team_memberships 
end 

class Teams < ActiveRecord::Base 
    has_many :users, :through => :team_memberships 
    has_many :team_memberships 

    has_many :clubs, :through => :club_memberships 
    has_many :club_memberships 
end 

class Clubs < ActiveRecord::Base 
    has_many :teams, :through => :club_memberships 
    has_many :club_memberships 
end 

Ich mag eine eindeutige Liste von Clubs zu bekommen, um der Lage sein, dass der Benutzer ein Mitglied ist. Wenn ich folgendes habe:

@teams = User.last.teams 

Wie bekomme ich eine Liste von Clubs, denen diese Teams angehören? Wenn es irgendwelche Duplikate gibt, möchte ich sie nur einmal in der Liste anzeigen.

Zeit, wenn ich tun:

<% @user.teams.each do |t| %> 
    <% t.clubs.each do |c| %> 
    <%= link_to c.name, c %> 
    <% end %> 
<% end %> 

ich offensichtlich eine vollständige Liste erhalten, aber ich möchte die Duplikate entfernen. Kann jemand eine Reparatur anbieten?

Antwort

0

Sieht aus wie ich, wie so eine Beziehung einfach einrichten können:

class User < ActiveRecord::Base 

    has_many :clubs, -> { uniq }, :through => :teams 

end 

und dann Referenz:

<% @user.clubs.each do |c| %> 
    <%= c.name %> 
<% end %> 

Bitte lassen Sie mich wissen, ob es einen besseren Weg!