我有一个简单的模型
class User
has_many :logs
class Logs
通过外键logs.user_id以通常的方式关联。我正在尝试使用 Arel 执行以下操作,根据 Arel 文档,它应该可以工作。
u_t = Arel::Table::new :users
l_t = Arel::Table::new :logs
counts = l_t.
group(l_t[:user_id]).
project(
l_t[:user_id].as("user_id"),
l_t[:user_id].count.as("count_all")
)
l_t.joins(counts).on(l_t[:id].eq(counts[:user_id]))
当我这样做时,我收到错误
TypeError: Cannot visit Arel::SelectManager
然而《阿雷尔》的作者明确建议 http://web.archive.org/web/20100131013905/http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/阿雷尔竟然能做出这种事。
请不要写关于如何使用原始 sql、另一种类型的 Arel 查询等实现相同查询的回复。这是我感兴趣的模式,而不是该查询的具体结果。
您可以使用 join_sources 从 Arel::SelectManager 实例检索 Arel::Nodes::Join,并将其传递给 joins
使用你的例子:
l_t.joins(counts.join_sources).on(l_t[:id].eq(counts[:user_id]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)