2011-08-16 2 views
1

У меня есть некоторые 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") 

Когда я попытался преобразовать это 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»для "схем": String`

Каким образом? Это потому, что это не ассоциация в моей модели Page? Можно ли перевести этот SQL в ARel без создания ассоциаций в модели?

ответ

8
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.*"); 
1

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)")... 

 Смежные вопросы

  • Нет связанных вопросов^_^