我有一个Rails引擎,它使用carrierwave并提供自己的默认图像。
我想在宿主应用程序中覆盖此默认图像,因此需要覆盖上传者的default_url
方法。
这似乎并不像看起来那么简单,我认为它可能与如何安装carrierwave卸载器有关。打开课程并添加新版本的方法似乎不起作用。
有关如何实现这一目标的任何想法?
答案 0 :(得分:1)
default_url 方法可用于设置资产的默认值(如果不存在)。
class MyUploader < CarrierWave::Uploader::Base
def default_url(*args)
"/images/fallback/" + [version_name, "default.png"].compact.join('_')
end
end
这适用于所有版本。如果要为不同版本设置不同的默认值,则可以覆盖此方法
class MyUploader < CarrierWave::Uploader::Base
# this will work for all version
def default_url(*args)
"/images/fallback/" + [version_name, "default.png"].compact.join('_')
end
version :thumbnail do
# this will work for thumbnail version only.
def default_url(*args)
"assets/thumb.png"
end
end
end
答案 1 :(得分:0)
The documentation指出覆盖上传器类中的default_url方法应该是微不足道的。事实上,default method是空白的。
class MyUploader < CarrierWave::Uploader::Base
def default_url
ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
end
end
如果这不起作用,可能还有其他问题,例如需要重新启动服务器,或运行bundle clean
等。
答案 2 :(得分:0)
有多个版本的解决方案而不是version_name,就像这样使用它
ActionController::Base.helpers.asset_path("dashboard/" + [@mounted_as, "file_name.png"].compact.join('_'))
在@mounted_as中,您将获得版本
的符号例如
version :person_image
@mounted_as将是:person_image
玩得开心=)
答案 3 :(得分:-1)
您可以覆盖store_dir
方法来更改图片的网址。
class MyUploader < CarrierWave::Uploader::Base
def store_dir
'public/my/upload/directory'
end
end
你可以在这里找到:
https://github.com/carrierwaveuploader/carrierwave#changing-the-storage-directory