Ruby on rails 如何解决N+;1用于ActiveStorage URL?

Ruby on rails 如何解决N+;1用于ActiveStorage URL?,ruby-on-rails,rails-activestorage,ruby-on-rails-5.2,Ruby On Rails,Rails Activestorage,Ruby On Rails 5.2,如何使用URL预加载所有记录 这就是我在jbuilder中获取URL的步骤: # views/users/index.json.jbuilder ... json.avatar_url user.avatar.attached? && rails_blob_url(user.avatar) ... Comment has_one :user User has_one_attached :avatar 您将如何预加载所有用户及其头像 产生以下错误: Act

如何使用URL预加载所有记录

这就是我在jbuilder中获取URL的步骤:

# views/users/index.json.jbuilder
...
json.avatar_url user.avatar.attached? && rails_blob_url(user.avatar)
...


Comment
    has_one :user

User
    has_one_attached :avatar
您将如何预加载所有用户及其头像


产生以下错误:

ActiveRecord::AssociationNotFoundError(在用户上找不到名为“avatar”的关联;可能是您拼错了?)

执行时会弹出相同的错误:

User.includes(:avatar)

对于名为
:avatar
的单一附件,Active Storage会添加一个
,其中包含\u attached\u avatar
作用域,用于预加载相关关联:

@users.with_attached_avatar.each do |user|
  # ...
end

请参阅API文档。

您这样做是为了获得用户列表吗?您还可以附加您填充此用户列表的位置吗?@Nermin补充道。我想这就是你想要的。什么是
user.avatar
,它与
user
有什么关系?从你的错误看来,这似乎不是一种联系。这是一个属性吗?@JohanWentholt我刚刚添加了一个更新。如果我提取所有评论并尝试预加载用户和他们的头像呢?啊,我找到了<代码>包括(用户::化身\u附件)。谢谢你的帮助@草莓,接近。您还需要使用
includes(用户:{avatar\u attachment::blob})
来预加载blob。@FaizaanKhan,为多个附件添加了一个等效的作用域:例如,
@users.with_attached\u highlights
。Rails 6 doc@
@users.with_attached_avatar.each do |user|
  # ...
end