通过has_many关系的唯一列表

时间:2016-03-21 02:25:15

标签: ruby-on-rails ruby unique has-many-through has-many

我有3个模特

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

我希望能够获得用户所属的俱乐部的唯一列表。如果我有以下内容:

@teams = User.last.teams

我如何获得这些球队所属俱乐部的名单。如果有任何重复,我只想在列表中显示一次。

目前如果我这样做:

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

我显然有一个完整的列表,但我想删除重复项。任何人都可以提供修复吗?

1 个答案:

答案 0 :(得分:0)

看起来我可以像这样建立一种关系:

class User < ActiveRecord::Base

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

end

然后参考:

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

如果有更好的方法,请告诉我!