问题:ZWZ100001您可以加入另一个不是Arel协会的表吗?

当我想寻找将特定方案分配给它的特定页面时(通过方案\ _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 methodjoin \ _sql'for“ schemes”:string `

怎么来的?是因为它不是我的ZWZ100005型号中的关联吗?一个人可以在不创建模型中的关联的情况下将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.*");
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐