载波object.url VS object.image_url

时间:2019-06-11 18:48:43

标签: ruby-on-rails ruby-on-rails-5 carrierwave

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

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

account.rb:

mount_uploader :logo, ImageUploader

image.rb:

mount_uploader :image, ImageUploader

这会将文件上传到:

  

“上载/#{model.class.to_s.underscore} /#{mount_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

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,我怀疑logo_url是否可以在@account上运行(尽管我尚未对此进行测试)

source