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