载波 object.url VS object.image_url

Carrierwave object.url VS object.image_url

在我的 Rails 5 应用程序中,我使用 Carrierwave 上传图像。

我必须使用相同的上传器建模:

account.rb:

mount_uploader :logo, ImageUploader

image.rb:

mount_uploader :image, ImageUploader

这会将文件上传到:

"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"

现在奇怪的是我可以使用:

@account.logo&.url(:thumb) // works!
@account.logo&.image_url(:thumb) // error!

但在图片模型上(一个产品有很多图片):

@product.images.first&.image_url(:thumb) // works!
@product.images.first&.url(:thumb) // error!

所以在第一种情况下我必须使用 .url 而在第二种情况下我必须使用 .image_url

我不知道为什么...有帮助吗?

实例方法 image_url 是根据传递给 mount_uploader 的列动态定义的,并且只是在该列上调用 url。定义看起来像这样...

def #{column}_url(*args)
  #{column}.url(*args)
end

所以,我怀疑 logo_url 可以在 @account 上工作(虽然我没有测试过)

source