1

如何在 Ruby on Rails 中查询侧祖父母?

例如,我有以下模型设置:

用户

class User < ActiveRecord::Base
   has_many :registrations
end

登记

class Registration < ActiveRecord::Base
   belongs_to :user
   belongs_to :competition
end

竞赛

class Competition < ActiveRecord::Base
  has_many :registrations
  belongs_to :tournament
end

比赛

class Tournament < ActiveRecord::Base
  has_many :competitions
end

所以我想做的是找到所有拥有属于特定Tournament的注册的用户。我知道的唯一方法是找到所有用户,遍历每个用户,然后像这样查询每个用户的个人注册......

<% @users.each do |user| %>
    <% if user.registrations..joins(:competition).where("competitions.tournament_id = #{params[:tournament]}").count > 0 %>
        print out user information...
    <% end %>
<% end %>

这似乎是一种真正的半知半解的做事方式,因为我正在选择我不需要的记录,任何人都可以建议一种更好的更 Railsy 方式来实现这一点吗?

4

1 回答 1

2

创建更“Railsy”解决方案的第一步是将查询逻辑移出视图并移入模型层。您可以将这两个查询添加到您的锦标赛模型中:

class Tournament < ActiveRecord::Base
  has_many :competitions

  def registrations
    regs = []
    self.competitions.each do |competition|
      competition.registrations.each do |registration|
        regs << registration
      end
    end
    regs
  end

  def users
    usrs = []
    self.registrations.each do |registration|
      usrs << registration.user
    end
    usrs
  end

end

现在,您可以在视图中:

<% @tournament.users.each do |user| %>
  User: <%= user.name %><br />
<% end %>

如果您需要,您还有一个方法可以返回锦标赛中的所有注册。希望这可以帮助您了解另一种方法。

于 2012-06-22T05:59:40.637 回答