我有办法将多个Active Record关系组合到一个查询中吗?

时间:2013-03-08 13:04:54

标签: ruby-on-rails-3 activerecord

我有一个像这样的小组课。团体有很多人。

class Group < ActiveRecord::Base
  has_many :people
  def notices
    Notice.where(:person_id => people).where("radius <= ?", radius)
  end
end

在我的通知控制器中,我想显示所有用户组的所有通知,而不重复。 目前我正在这样做,这是蹩脚的。有没有办法将每个组的查询组合起来返回一个关系,而不是一个数组?

class NoticesController < ApplicationController
  def index
    @groups = current_person.groups
    @notices = []
    @groups.each do |g|
      @notices += g.notices
    end
  end
end

由于

1 个答案:

答案 0 :(得分:2)

我假设有一个人模型。

好。

试试这个。

在个人模型中,添加此

has_many :all_group_members, through: :groups, class_name: "Person"

然后添加此方法

def all_notices
  Notice.where(:person_id => all_group_members.pluck(:id)).where("radius <= ?", radius)
end

最后在你的控制器中你可以做到这一点

current_person.all_notices