Ruby on rails Rails:如何获取直接相关的记录,但在关系的上下文中:通过

Ruby on rails Rails:如何获取直接相关的记录,但在关系的上下文中:通过,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个奇怪的例子,我有一个DayReport,它有很多报告,属于一个帐户。我使用has\ U MUN TO为账户设置了我的DayReport模块: class DayReport < ActiveRecord::Base has_many :reports has_many :accounts, -> { order(:last_name) }, through: :reports end 问题是,这将触发对每个帐户的查询,我认为这是不必要的。我只是想不出正确的方法。我希

我有一个奇怪的例子,我有一个DayReport,它有很多报告,属于一个帐户。我使用has\ U MUN TO为账户设置了我的DayReport模块:

class DayReport < ActiveRecord::Base
  has_many :reports
  has_many :accounts, -> { order(:last_name) }, through: :reports
end

问题是,这将触发对每个帐户的查询,我认为这是不必要的。我只是想不出正确的方法。

我希望我能正确理解它

您可以通过使用with:
.includes
,减少请求数,因为includes将加载(1.查询)父级的所有记录,以及(2.查询)includes方法中引用的所有记录(其中)

.where
中,您可以查看
日报告
id是否存在或是否是某个id(我不太确定您在这里问什么)

例如(带有id):

Account.includes(:reports)。其中(reports:{day\u report\u id:specified\u id})

或者如果他们有关系:

Account.includes(:reports).where.not(reports:{day\u report\u id:nil})

这将把查询数量减少到两个


希望有帮助

也许
加入
可以帮助您:


帐户。包括(:报表)。联接(:日报表)

它获取所有在DayReport中有记录并且预加载了
报告的帐户

问题是,这将触发对每个帐户的查询
不确定您在这里的意思好吧,如果我为帐户调用此方法,它将触发查询。因此,当为10个帐户显示这些day_报告时,我将对这些帐户进行1次查询,然后对每个帐户进行1次查询以获取报告(总共10次),但对于这一点,我仍然需要传递每个记录的day_report.id。因为我的起点是显示25天的报告,所以我需要再次执行此查询25次,对吗?否。如果25条记录的日期记录id相同,则不会。你也可以设置一个限制,这样你只会收到25个对象。不幸的是,帐户和day_report之间没有直接关系,所以我猜它们的连接将不起作用。这不是一个问题-这是内部连接的。查看is:Benefit.joins(:categories)。to\u sql=>“benefits\”内部连接\“benefits\”内部连接\“benefits\”类别\“benefits\”id \“=”内部连接\“categories\”类别\“categories\”id \“benefits\”中的\“benefits\”删除\“at\”为空
  def reports_for_account account
    reports.where(account: account)
  end