gpt4 book ai didi

ruby-on-rails - 自动选择 ActiveRecord 中连接表的所有列的方法?

转载 作者:行者123 更新时间:2023-12-01 13:00:41 26 4
gpt4 key购买 nike

想知道升级到 Arel 后,ActiveRecord 是否支持一种自动的方式来从连接表中选择列,而不必在 select 子句中明确列出它们。

鉴于我正在将 users 表加入到 posts 中,希望能够以更简洁的方式执行类似的操作:

  scope :select_user,
select("posts.*, " + User.columns.map{|c|
"users.#{c.name} user_#{c.name}"}.join(','))

所以,我想自动选择用户的字段,这样我就可以说

Post.joins(:user).select_user.first.user_name

最佳答案

如果您想在查询完成后访问关联的属性,我想您在这里真正想要的是使用includes。所以同样的查询将是

Post.includes(:user).first.user.name

这将产生两个查询,一个是select * from users,一个是select * from posts where posts.user_id in (id1, id2, id3...) (假设 post belongs_to user)这在特定情况下可能会影响性能,但从语法的角度来看可能是值得的。在某些情况下,它甚至可能更快 Rails :include vs. :joins .

如果您向查询添加限制运算符,例如 Arel 也会智能地使用 join Post.includes(:user).where('users.name = "Bo Bob"') 将使用 join 进行一次查询,并使您能够使用关联在生成的 Post 对象上。

关于ruby-on-rails - 自动选择 ActiveRecord 中连接表的所有列的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142580/

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