【发布时间】:2017-06-18 12:06:37
【问题描述】:
Theme 和 Quote 模型之间存在 HABTM 关系。 themes index 视图显示与每个主题相关联的引号计数。我想在该列上添加一个 Ransack sort_link,以便 themes 可以按关联的 quotes 的计数进行排序。
我已经通过使用计数器缓存列的has_many 关联成功地做到了这一点,但是 Rails 不支持 HABTM 关联的计数器缓存列。
到目前为止,我已经有了一个范围,它向Theme 模型添加了一个名为 quotes_count 的虚拟属性(通过执行单个查询,避免 N+1):
scope :with_quotes_count, -> do
joins('LEFT OUTER JOIN quotes_themes on quotes_themes.theme_id = themes.id')
.select('themes.*, COUNT(quotes_themes.quote_id) as quotes_count')
.group('themes.id')
end
似乎我必须使用 ARel 将上述范围转换为“Ransacker”,但到目前为止我所有的尝试都失败了。
我正在使用 Rails 4.2.2、ARel 6.0.4 和 PostgreSQL 9.5.4。
任何帮助将不胜感激。
【问题讨论】:
-
我不确定您是否可以使用范围进行排序。我一直使用 Arel 包装器。
标签: ruby-on-rails arel ransack