0

我是 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 对象在内的所有用户?就像结果将是所有用户和每个用户中的角色类型对象和公司类型对象?

谢谢

4

2 回答 2

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
于 2013-02-28T12:35:32.590 回答
0

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

在那里你应该看到这样的东西:

@users = User.all

This fetches all User objects from database.

Now you can iterate over those Users and access the role field like you did before.

But: This uses lazy loading. Means: For every accessed role it will execute a separate query. To fix this use "eager loading" (http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations):

@users = User.includes(:role)

This will fetch all Users with it's associated role in one query

于 2013-02-28T12:38:35.490 回答