您如何解决 ActiveStorage URL 的 N+1 问题?

How do you solve N+1 for ActiveStorage URLs?

如何预加载所有记录及其 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

您将如何预加载所有用户及其头像?


Comments.includes(users: :avatar)

产生以下错误:

ActiveRecord::AssociationNotFoundError (Association named 'avatar' was not found on User; perhaps you misspelled it?)

执行时弹出同样的错误:

User.includes(:avatar)

对于名为 :avatar 的单一附件,Active Storage 添加了一个预加载相关关联的 with_attached_avatar 作用域:

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

请参阅 has_one_attached 的 API 文档。