我想查询属于这些模型的学校的部分:
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
我对如何做到这一点有点失落。
我希望能够调用属于学校的部分列表,并从部分找到学校(并查询其间的所有关系)
非常感谢任何帮助。
答案 0 :(得分: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
答案 1 :(得分:1)
必须从上到下遍历每个模型。 例如:
s = School.find(1)
s.terms.find(1).departments.find(1).courses.find(1).sections
这将为您提供与school_id = 1
由于你的模型有级联很多,你必须这样做,除非你想改变你的数据库模式..
答案 2 :(得分: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