gpt4 book ai didi

ruby-on-rails - 聚合关联 has_many 的 Active Record 关系方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:41 24 4
gpt4 key购买 nike

考虑这两个模型:

class User < ApplicationRecord
has_many :blogs
end

class Blog < ApplicationRecord
belongs_to :user
end

我想做这样的事情,但行不通:

my_users        = User.where(age: 35) 
all_assoc_blogs = my_users.blogs # errors out

这里是错误:

undefined method `blogs' for User::ActiveRecord_Relation:

我明白为什么它不起作用:您只能在单个 user 对象上调用 blogs。您不能在 users 的事件记录关系对象上调用 blogs

最终,我想要一个事件记录关系对象,它包含 my_users 事件记录关系对象中所有用户的所有博客的集合。有没有一种巧妙的方法可以做到这一点?这是我能想到的唯一方法,而且非常难看:

my_users   = User.where(age: 35)
temp_blogs = []
my_users.each {|u| temp_blogs << u.blogs.to_a}
blog_ids = temp_blogs.flatten.pluck(:id)
Blog.where(id: blog_ids)

最佳答案

事件记录是 Metrodome 向您返回事件记录关系而非唯一结果的地方。你需要:

my_users = User.where(age: 35).first

然后你应该能够通过以下方式获取一个用户的博客:

my_users.blogs

但是如果你的目的是拥有不同用户的所有博客,你应该尝试:

my_user_ids = User.where(id: 35).pluck(:id)
Blog.where(user_id: my_user_ids)

关于ruby-on-rails - 聚合关联 has_many 的 Active Record 关系方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383275/

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