您好我是rails 3的新手,无法弄清楚如何创建高级查询。
在视图中,我需要显示一个文档列表,每个文档都有相关的packetType,按用户分组。
用户可以拥有多个主题,主题可以包含许多文档,而packetType可以包含许多文档
有四个表格:
users
subjects
documents
packet_types
所以这是我的模型关联
class User < ActiveRecord::Base
has_many :subjects
end
class Subject < ActiveRecord::Base
belongs_to :user
has_many :documents
end
class Document < ActiveRecord::Base
belongs_to :subject
belongs_to :packetType
end
class PacketType < ActiveRecord::Base
has_many :documents
end
在控制器中如何调用此查询?并在视图中如何显示主题名称,属于每个主题的文档名称以及属于每个文档的用户名的packet_type名称?
答案 0 :(得分:0)
我认为你的查询看起来像这样:
@subjects = current_user.subjects.includes(:documents => :packetType)
该查询将加载所有用户主题,然后急切加载属于主题的所有文档以及文档的packetType。那么在你看来它会看起来像这样(假设haml):
- @subjects.each do |subject|
= subject.name
- subject.documents.each do |document|
= document.name
= document.packetType.name
由于所有数据库查询都是在控制器的一行中完成的,因此视图只需要遍历刚刚加载的所有数据。