【问题标题】:Unique list through a has_many relationship通过 has_many 关系的唯一列表
【发布时间】:2016-07-07 10:32:31
【问题描述】:

我有 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 %>

我显然得到了一个完整的列表,但我想删除重复项。谁能提供解决办法?

【问题讨论】:

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


    【解决方案1】:

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

    class User < ActiveRecord::Base
    
      has_many :clubs, -> { uniq }, :through => :teams
    
    end
    

    然后参考:

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

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

    【讨论】:

    • 对我不起作用,因为我使用的是 Rails 5 而不是 Rails 4。NoMethodError: undefined method `extensions' for #&lt;Array:0x0000000007b22918&gt; Did you mean? extend 请参阅 stackoverflow.com/a/318146/10245 - 使用 distinct 而不是 uniq
    猜你喜欢
    • 2011-08-16
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多