你可以加入另一张不属于ARel中的关联的表吗?
问题描述:
我有一些SQL是的工作时,我想看看有(通过scheme_assignment全部)分配给它的特定方案的特定网页:当我试图将其转换为阿雷尔你可以加入另一张不属于ARel中的关联的表吗?
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")
:
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”的 “计划”: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.*");
答
当你有一个协会成立时,Rails知道什么样的连接使用。我认为(虽然没有尝试过)它应该以这种方式工作:
Page.select("pages.id").joins("INNER JOIN scheme_assignments ON (scheme_assignments.schemable_type = 'Page' AND scheme_assignments.schemable_id = pages.sid)")...