你可以加入另一张不属于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 Guides

当你有一个协会成立时,Rails知道什么样的连接使用。我认为(虽然没有尝试过)它应该以这种方式工作:

Page.select("pages.id").joins("INNER JOIN scheme_assignments ON (scheme_assignments.schemable_type = 'Page' AND scheme_assignments.schemable_id = pages.sid)")...