gpt4 book ai didi

ruby-on-rails - 预先加载 ActiveRecord 中的自定义连接

转载 作者:行者123 更新时间:2023-12-01 03:26:02 25 4
gpt4 key购买 nike

我有一张有很多预订的餐馆的 table 。现在我想查询所有餐馆,如果他们有 2 人的预订,它应该预加载这些关联。如果没有 2 的预订,它仍应返回餐厅,但关联为空。

为此,我尝试了以下查询:

Restaurant.eager_load(:reservations).where("number_of_people = ?", 2)

但是,这不起作用,因为它会丢弃所有有预订但都不是 2 人的餐厅。

所以我想做的是将该条件移动到连接条件中。就像是:
Restaurant.joins('LEFT OUTER JOIN \"reservations\" ON \"reservations\".\"restaurant_id\" = \"restaurants\".\"id\" AND \"reservations\".\"number_of_people\" = ?', 2)

这将给出我需要的结果,但是这不是预加载“保留”关联而是导致 N+1 问题。

似乎eager_load 不接受自定义查询。我找到了这些主题: https://github.com/rails/rails/issues/12270JOIN ON ... AND conditions when eager loading association in ActiveRecord但没有提供解决方案。

最佳答案

我认为迪帕克是对的。
尝试这个:

 #retaurant.rb
has_many :reservations_for_two, ->{number_of_people: 2}, class_name: 'Reservation'

进而:
  Restaurant.preload(:reservations_for_two) #(for two separate queries)

或者
   Restaurant.eager_load(:reservations_for_two) #(one join query)

关于ruby-on-rails - 预先加载 ActiveRecord 中的自定义连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41532444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com