我正在创建json输出,我基本上得到了一堆任务,但我希望每个任务的json输出都包含用户名。
如何编写有效的activerecord查询来获取此信息?
这样的事情:Task.joins(:user).joins(:user_details)
数据库表:
Task
|id|user_id|
User
|id|
UserDetails
|id|user_id|first_name|last_name|
型号:
class Task < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :user_details, :dependent => :destroy
has_many :tasks
end
class UserDetails < ActiveRecord::Base
belongs_to :user
end
修改
Task.joins(:user => :user_details)
在结果集中不包含user_details.first_name
和user_details.last_name
。这就是我最终的目标。
[#<Task id: 5, user_id: 1>, #<Task id: 10, user_id: 3>, #<Task id: 9, user_id: 9>]
答案 0 :(得分:2)
容易腻:
Task.joins(user: :user_details)
根据您的编辑,Rails不会以这种方式工作。除非要编写自定义SQL,否则仍需要引用对象本身来获取其属性。
所以,你可以这样做:
Task.joins(user: :user_details)
# Or
Task.includes(user: :user_details)
然后,在您的视图中,您可以通过它在查询中抓取的父级来引用该属性。
user.user_details.first_name
class User
delegate :first_name, :whatever, to: :user_details
end
user.first_name => # Blah Blah
详细了解delegate。