gpt4 book ai didi

ruby-on-rails - 如何在 activerecord 查询中使用多个 .joins

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:44 25 4
gpt4 key购买 nike

我正在创建 json 输出,我基本上得到了一堆任务,但我希望每个任务的 json 输出都包含用户名。

如何编写高效的事件记录查询来获取此信息?

是这样的: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_nameuser_details.last_name在结果集中。这就是我最终追求的。

[#<Task id: 5, user_id: 1>, #<Task id: 10, user_id: 3>, #<Task id: 9, user_id: 9>]

最佳答案

简单易行:

Task.joins(user: :user_details)

根据您的编辑,Rails 不会以这种方式工作。除非您想编写自定义 SQL,否则您仍然需要引用对象本身来获取其属性。

所以,你可以这样做:

Task.joins(user: :user_details)
# Or
Task.includes(user: :user_details)

然后,在您的 View 中,您可以通过在查询中获取的父属性来引用该属性。

user.user_details.first_name

但是,有一个更好的方法:委托(delegate)

class User
delegate :first_name, :whatever, to: :user_details
end
user.first_name => # Blah Blah

阅读更多关于 delegate 的信息.

关于ruby-on-rails - 如何在 activerecord 查询中使用多个 .joins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com