Ruby on rails 如何解决N+;1用于ActiveStorage URL?
如何使用URL预加载所有记录 这就是我在jbuilder中获取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
# 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