获取RoR 3中包含关联的所有记录

时间:2013-02-28 12:25:13

标签: ruby-on-rails

我是RoR 3中的新手,我遇到了问题。 我有一个类User这样的

class User < ActiveRecord::Base
  attr_accessible :firstname, :lastname, :login, :password, :rank, :sa_id, 
  belongs_to :role
  belongs_to :company
end

在我的控制器中我获得第一个用户(例如)User.first我可以访问User.first.role

是否可以获取包括belongs_to对象在内的所有用户? 就像结果一样,所有用户和每个用户都有一个类型为角色的对象和一个类型为company的对象?

由于

2 个答案:

答案 0 :(得分:3)

我不确定这是否是您正在寻找的但是您可以急切加载关联,因此只有1个请求被发送到数据库(实际上是3个,一个用于用户,一个用于角色,一个用于公司)

>> users = User.includes(:role, :company)
>> users.each do |user|
     puts user.role
     puts user.company
   end

更新:渲染json,使用

respond_with(@user) do |format|
  format.json { render json: @user.to_json(methods: [:company, :role] }
end

答案 1 :(得分:0)

如果你使用了scaffolding,那么在UsersController中也应该有一个生成的index方法。

你应该看到这样的东西:

@users = User.all

这将从数据库中提取所有用户对象。

现在,您可以迭代这些用户并像以前一样访问role字段。

但是:这使用延迟加载。意味着:对于每个访问过的role,它将执行单独的查询。要解决此问题,请使用“预先加载”(http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations):

@users = User.includes(:role)

这将在一个查询中获取具有相关角色的所有用户