2011-08-16 2 views
1

私はそれに割り当てられた特定のスキームを持っている特定のページ(scheme_assignmentを介してすべて)を探したいときに働いているいくつかのSQL持っている:私はARELにこれを変換しようとすると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に変換することはできますか?

答えて

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)")... 
関連する問題