Rails 3高级查询

时间:2012-02-11 15:15:08

标签: ruby-on-rails

您好我是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名称?

1 个答案:

答案 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

由于所有数据库查询都是在控制器的一行中完成的,因此视图只需要遍历刚刚加载的所有数据。