gpt4 book ai didi

mysql - 最佳性能明智的查询来获取查询的嵌套资源的父级

转载 作者:行者123 更新时间:2023-11-29 10:39:30 25 4
gpt4 key购买 nike

我正在实现嵌套在列表中的可用性模型。它是一个租赁应用程序。

class Listing
has_many :availabilities, dependent: :destroy
end

class Availability
belongs_to :listing
end

可用性表包含开始日期和结束日期列。

我正在通过搜索表单编写查询,以查找存在可用性的列表,并且表单中给出的日期位于这些可用性的开始日期和结束日期之间。

我在类方法中的查询如下所示:

def self.search(params)
date = params[:date]
listingsids = Availability.where('startdate <= ?', date).where('enddate >= ?', date).pluck('listing_id')
products = Listing.where(id: listingsids)
end

但是我觉得这效率不高。我希望我可以编写 Listing.joins(:availability) 然后使用它,但 Rails 不允许这样做。我只能以另一种方式加入,这将使我与可用性对象建立关系,并且我想要列表,即父资源。

如何提高效率并减少正在执行的查询数量?

非常感谢您的帮助:)

最佳答案

您应该能够在列表中使用联接来获取可用性关系,联接使用关系名称而不是模型名称来工作,因此而不是 joins(:availability)你应该使用joins(:availabilities) 。像这样的东西应该可以工作,并且只需针对您的案例使用单个查询:

Listing.joins(:availablities).where('availability.startdate <= ?', date).where('availability.enddate >= ?', date)

请注意,连接使用关系名称 joins(:availabilities)但where中的字符串使用表名where('availability.startdate <=?', date)

关于mysql - 最佳性能明智的查询来获取查询的嵌套资源的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788025/

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