2010-12-03 46 views
1

我使用的Rails 3和希望得到一個學生訪問基於以下Rails的查詢和多個連接模式

class Student 
    has_many :students_levels 
    has_many :levels, :through => :students_levels 
    end 

    class Class 
    has_many :classes_levels 
    has_many :levels, :through => :classes_levels 
    end 

    class Level 
    has_many :students_levels 
    has_many :classes_levels 
    end 

    class StudentsLevel 
    belongs_to :students 
    belongs_to :levels 
    end 
    class ClassesLevel 
    belongs_to :classes 
    belongs_to :levels 
    end 

的模式,我想出了下面的查詢,但沒有類認爲它看起來是最好的Rails做事情的方式,並希望得到更多的建議。 Thx

Class.where(:id => (ClassesLevel.where(:level_id => Student.find(1).levels))) 

我想將此作爲一個實例方法添加到學生,並認爲有一個更好的方法來做很多事情。

+3

只是一個提示:稱爲'班'的班級名稱會導致許多問題。 – hade 2010-12-03 06:40:43

回答

0

我完全不理解你的類結構背後的整個邏輯。爲什麼你不直接將學生連接到課堂上?以及一個班級可以有多個級別。我的意思是如果你有Math1和Math2,那是不同的課程,對嗎?或者你有Math1,2,3?

好了,反正這裏的解決方案,如果你想使用當前assosiations,我希望它符合您需求:

Class Student  
... 
def available_classes 
    Class.find(:all, 
     :include => {:levels => {:students_levels => :student}}, 
     :conditions => ["students.id = ?", self.id]) 
    end 

很遺憾,這仍是Rails的2.X格式...

+0

@Joey,這有什麼好運氣? – hade 2011-01-24 11:21:21