当我想查找分配有特定方案的特定页面时(全部通过 scheme_assignment),我有一些正在运行的 SQL:
Page.find_by_sql("
SELECT pages.id
FROM pages
INNER JOIN scheme_assignments ON (scheme_assignments.schemable_type = 'Page' AND
scheme_assignments.schemable_id = pages.sid)
INNER JOIN schemes ON (schemes.sid = scheme_assignments.scheme_id AND
schemes.sid IN (4,6,7))
GROUP BY pages.id")
当我尝试将其转换为 ARel 时:
Page.select("pages.id")
.joins("scheme_assignments")
.on("scheme_assignments.schemable_type = 'Page' AND scheme_assignments.schemable_id = pages.sid")
.joins("schemes")
.on("schemes.sid = scheme_assignments.scheme_id AND schemes.sid IN (1)")
.group("pages.id")
我会得到这个错误:NoMethodError: undefined method
join_sql' for "schemes":String`
怎么会?是因为它不是我的 Page
模型中的关联吗?是否可以在不在模型中创建关联的情况下将该 SQL 转换为 ARel?
最佳答案
Page.joins("INNER JOIN scheme_assignments
ON (scheme_assignments.schemable_type = 'Page' AND scheme_assignments.schemable_id = pages.sid)
INNER JOIN schemes
ON (schemes.sid = scheme_assignments.scheme_id AND schemes.sid IN (4,6,7))").
select("DISTINCT pages.*");
关于ruby-on-rails - 你能加入另一个在 ARel 中不是关联的表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079383/