我是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的对象?
由于
答案 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)
这将在一个查询中获取具有相关角色的所有用户