0

これらのモデルを使用して、学校に属するセクションを照会したいと思います。

School
  has_many :terms

Term
  belongs_to :school
  has_many :departments

Department
  belongs_to :term
  has_many :courses

Courses
  belongs_to :department
  has_many :sections

Section
  belongs_to :course

これを行う方法について少し迷っています。

学校に属するセクションのリストを呼び出して、セクションから学校を見つけられるようにしたいと思います (そして、その間のすべての関係を照会します)。

どんな助けでも大歓迎です。

4

3 に答える 3

1

Rails 3.1 以降を使用している場合は、 :has_many :through を使用して、各学校内のセクションを取得できます。まず、モデルでリレーションを設定する必要があります。

School
  has_many :terms
  has_many :departments, :through => :terms

Term
  belongs_to :school
  has_many :departments

Department
  belongs_to :term
  has_many :courses
  has_many :sections, :through => :courses

Courses
  belongs_to :department
  has_many :sections

Section
  belongs_to :course

次に、学校のセクションを取得するには...

School.first.departments.collect{|d| d.sections}.flatten!

あなたがする必要があるのは、セクションが属する学校を取得することだけです

section.course.department.term.school

于 2013-03-05T00:06:50.773 に答える
1

各モデルを上から下に反復する必要があります。例えば:

s = School.find(1)
s.terms.find(1).departments.find(1).courses.find(1).sections  

これにより、関連付けられているセクションが表示されますschool_id = 1

あなたのモデルにはカスケードがたくさんあるので、データベーススキーマを変更したくない限り、このようにする必要があります..

于 2013-03-05T09:12:03.947 に答える
0

セクションから学校を見つけるには、次のようにします。

section.course.department.term.school

これを遅くするほど多くのレコードがない場合は、次のようにして、特定の学校のセクションの配列を取得できます。

sections = []
school.terms.each do |term|
   term.departments.each do |department|
      department.courses.each do |course|
         course.sections.each do |section|
            sections << section
         end
      end
   end
end

さらに処理を行う必要がある場合は、その間の各関係にアクセスすることもできます。

そして、ここに簡潔なバージョンがあります:

sections = school.terms.map(&:departments).flatten.map(&:courses).flatten.map(&:sections).flatten
于 2013-03-05T00:03:32.803 に答える