2012-07-27 50 views
0

我正在嘗試使用Rails 3 activerecord約定來編寫此查詢。如何使用Rails 3 activerecord編寫這個sql查詢?

SELECT s.name, s.id FROM tripoli_schools_development.campus_programs cp 
    JOIN tripoli_schools_development.career_categories cc ON cp.career_category_id = cc.id 
    JOIN tripoli_schools_development.campuses c ON c.id = cp.campus_id 
    JOIN tripoli_schools_development.schools s ON s.id = c.school_id 
WHERE cp.enabled = true and c.enabled = true and s.enabled = true and cc.id = 2 
group by s.id order by s.name 

這裏是我的模型:

class CampusProgram < TripoliSchool 
    belongs_to :career_category 
    belongs_to :campus 
end 

class CareerCategory < TripoliSchool 
    has_many :career_programs 
    has_many :campus_programs 
end 

class Campus < TripoliSchool 
    self.table_name = 'campuses' 
    belongs_to :school 
    has_many :campus_programs 
end 

class School < ActiveRecord::Base 
    has_many :campuses, :class_name => "Campus" 
    has_many :campus_programs, :through => :campuses 
end 

和所有重要的

class TripoliSchool < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "tripoli_schools_#{Rails.env}" 
end 

回答

0

試試這個:

CompusProgram.select("shcools.name, shcools.id").joins([:career_categories, {:campuses => :schools}]).where("campus_programs.enabled = true and campuses.enabled = true and schools.enabled = true and career_categories.id = 2 ") 

我不知道,但你有這個想法。你可以在這裏看到文檔:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

+0

我得到一個語法錯誤與此有關。 ::校園=> {:schools}])。其中(「campus_programs。 :校園=> {:學校}似乎是錯誤所在。 – 2012-07-27 17:06:50

+0

你可以試試這個:joins(:career_categories).joins(: => {:schools}) – Dougui 2012-07-27 17:15:27

+0

':校園=> {:學校}'不正確,它應該是':校園=>:學校' – 2012-07-27 17:18:00

0

這是什麼工作得益於Dougui和anthonyalberto

CampusProgram.select("schools.name, schools.id").joins(:career_category).joins(:campus => :school).where("campus_programs.enabled = true and campuses.enabled = true and schools.enabled = true and career_categories.id = 2").group("schools.id").order("schools.name") 

這也適用

CampusProgram.select("schools.name, schools.id").joins([:career_category, {:campus => :school}]).where("campus_programs.enabled = true and campuses.enabled = true and schools.enabled = true and career_categories.id = 2").group("schools.id").order("schools.name")