Rails-запрос с использованием HMTH и нескольких моделей соединения - PullRequest
1 голос
/ 03 декабря 2010

Я использую Rails 3 и хотел получить классы, к которым у ученика есть доступ, на основе модели ниже

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

Я хочу добавить это в качестве метода экземпляра в Student и подумал, что будет лучший способ сделать что-то с помощью многим до конца.

1 Ответ

0 голосов
/ 03 декабря 2010

Я не совсем понял всю логику структуры вашего класса. Почему вы не соединяете учеников прямо в класс? И как класс может иметь много уровней. Я имею в виду, если у вас есть Math1 и Math2, это разные классы, верно? Или у тебя Math1,2,3?

Ну, во всяком случае, вот решение, если вы хотите использовать текущие ассоциации, я надеюсь, что оно соответствует вашим потребностям:

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

И извините, это все еще в формате Rails 2.x ...

...