gpt4 book ai didi

ruby-on-rails - 将(稍微复杂的)原始 SQL 查询转换为 ActiveRecord/Arel?

转载 作者:行者123 更新时间:2023-12-02 23:58:30 25 4
gpt4 key购买 nike

我有一个非常简单的Rails应用程序和一个非常简单的关系数据库:类别有很多样本。我只想加载具有 X 个样本的类别。

在普通 SQL 中我会做这样的事情:

SELECT
categories.*
FROM
categories
JOIN
(SELECT
category_id, COUNT(*) as sample_count
FROM
samples
GROUP BY
category_id
) AS subselect
ON
categories.id=subselect.category_id
WHERE
subselect.sample_count = X; -- where X is whatever

顺便说一句,这工作得很好,但是使用原始 SQL 与 Rails 不太一样。显然我想将这些类别作为模型实例,所以:

我将如何将类似的内容重写为 ActiveRecord 或 Arel 查询?它是否可行,或者我应该使用纯 SQL?也许有一种更简单的方法吗?

最佳答案

一个可能的好方法是使用 counter_cache,如本页所述:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

将名为samples_count的列添加到您的类别模型中:

add_column :categories, :samples_count, :integer

在您的示例模型中更新Belongs_to,如下所示:

belongs_to :category , :counter_cache => true 

您现在可以使用计数作为条件,例如:

Category.where(:samples_count => 7)

关于ruby-on-rails - 将(稍微复杂的)原始 SQL 查询转换为 ActiveRecord/Arel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9879954/

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