【发布时间】:2019-09-04 16:13:35
【问题描述】:
我想在管理页面(带有chartkick)上显示一个折线图,其中包含与其最早导出日期相关的分数增量。
我有以下型号:
# score.rb
class Score < ApplicationRecord
has_and_belongs_to_many :export_orders, join_table: :scores_export_orders
end
# export_order.rb
class ExportOrder < ApplicationRecord
has_and_belongs_to_many :scores, join_table: :scores_export_orders
end
对于每个至少有一个ExportOrder 的Score,我如何选择对应的ExportOrder 和最早的created_at(仅日期格式)?
我看过this,但我的情况是HABTM关系而不是简单的has_many。
我尝试了这段代码,以至少获得最旧的导出日期和分数数量之间的映射:
sql = "
SELECT
COUNT(DISTINCT scores.id), MIN(export_orders.created_at::date)
FROM
scores
INNER JOIN
scores_export_orders
ON
scores.id = scores_export_orders.score_id
INNER JOIN
export_orders
ON
export_orders.id = scores_export_orders.export_order_id
GROUP BY
export_orders.created_at::date
".split("\n").join(' ')
query = ActiveRecord::Base.connection.execute(sql)
query.map { |v| [v['count'], v['min']] }
但总分数大于所有具有导出日期的分数。 有什么想法吗?
【问题讨论】:
标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-5