2014-03-19 43 views
1

我有一个Rails引擎,它使用carrierwave并提供它自己的默认图像。如何在Rails引擎中覆盖carrierwave的default_url方法

我想在主机应用程序中覆盖此默认图像,因此需要覆盖上传器上的default_url方法。

这似乎并不像看起来那么简单,我认为它可能与如何装载载波卸载器有关。打开课程并添加新版本的方法似乎不起作用。

任何想法如何实现这一目标?

回答

0

The documentation指出重写uploader类中的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

+0

“打开类并添加方法的新版本似乎并没有工作。” (即,这正是我已经试过的) - 这里的问题是理解如何在Rails引擎中定义此方法的情况下执行此操作。 – benjaminjosephw

+0

这并不回答我的问题,但它可能对某人有所帮助,因此无论如何我都会奖励赏金。 – benjaminjosephw

-1

您可以覆盖store_dir方法来改变图像的URL。

class MyUploader < CarrierWave::Uploader::Base 
    def store_dir 
    'public/my/upload/directory' 
    end 
end 

,你可以在这里找到:

https://github.com/carrierwaveuploader/carrierwave#changing-the-storage-directory 
+0

这改变了上传的存储位置,而不是默认图像。 – benjaminjosephw

0

有多个版本,而不是VERSION_NAME一种解决方案,@mounted_as使用它像这样

ActionController::Base.helpers.asset_path("dashboard/" + [@mounted_as, "file_name.png"].compact.join('_')) 

你会得到的符号版本

示例

version :person_image 

@mounted_as将是:person_image

有乐趣=)