使用 Rails ActiveRecord 查询接口查找 a 的平均数量在两个模型之间有很多关联
Posted
技术标签:
【中文标题】使用 Rails ActiveRecord 查询接口查找 a 的平均数量在两个模型之间有很多关联【英文标题】:Finding the average number of a has many association between two models using Rails ActiveRecord query interface 【发布时间】:2021-12-12 04:56:46 【问题描述】:假设我有两个模型::User 和:Ringtone。 A :User 可以有多个 :Ringtones 并且一个 :Ringtone 属于一个用户。我希望能够使用 ActiveRecord 查询接口来计算属于:User 的平均铃声数量,但我正在努力弄清楚如何。
使用原始 sql 我可以得到如下数据:
ActiveRecord::Base.connection.execute("
(with tones_count as
(select
user_id, count(ringtones.id)
from
ringtones
group by 1)
select avg(count) from tones_count)").values
但这并不理想,我更希望能够使用 ActiveRecord 进行此查询/计算...
【问题讨论】:
这里的一切都很好。 ActiveRecord 查询接口不擅长做任何比最琐碎的数据库计算更多的事情,而且你想出的东西很可能会降低性能或降低可读性。 【参考方案1】:I would much rather be able to use ActiveRecord
,你可以这样做
table = Arel::Table.new(:ringtones)
Ringtone.from(
Ringtone.select(
table[:user_id],
table[:id].count.as("tones_count")
).group(1)
).average("tones_count")
【讨论】:
以上是关于使用 Rails ActiveRecord 查询接口查找 a 的平均数量在两个模型之间有很多关联的主要内容,如果未能解决你的问题,请参考以下文章
使用ActiveRecord的查询:: QueryMethods并返回ActiveRecord_Relation rails
Rails Activerecord 关系:使用子查询作为 SQL 选择语句的表
Mysql 5.7 json 数据类型,在 Rails 5 中使用 activerecord 查询