Rails 3.1资产管道外部视图

时间:2011-09-22 23:10:02

标签: ruby-on-rails-3.1 asset-pipeline

我正在尝试在CarrierWave上传器中设置CarrierWave的默认网址。为此,我想使用资产管道在uploaders/image_uploader.rb中执行以下操作:      def default_url        IMAGE_PATH( 'question_mark.png')      端

但它失败了因为:undefined method image_path'for:ImageUploader`

然后我尝试将include ActionView::Helpers::AssetTagHelper添加到uploaders/image_uploader.rb但收到此错误:undefined local variable or method config'for:ImageUploader`

知道如何让image_path助手在视图之外工作吗?

3 个答案:

答案 0 :(得分:1)

我问了一个类似的问题here并得出结论,没有办法让任何*_path*_url帮助者在模型中工作。我知道它绝对不应该完成(违反MVC等等),但它似乎根本无法完成......

我的问题是为Paperclip附件设置default_url,我最终将其设置为我将image_tag提供的路径(如果找到'image.png',则只需image.pngapp/assets/imagespublic/images)中,然后在访问时使用image_path。这对你有用吗?

答案 1 :(得分:0)

不确定我到底想要做什么,最后解决了这个问题但是如果有人来这里想要在他们的模型中添加_path或_url助手,请执行以下操作:

class Post < ActiveRecord :: Base
  include Rails.application.routes.url_helpers

  # This is so you can use _url params
  # you'll need to define the host in your config for it to work though
  default_url_options[:host] = Rails.configuration.host

  # ...

end

答案 2 :(得分:0)

我遇到了类似的问题,我通过在Rails 3.2中执行以下操作解决了这个问题。

我宣布了以下模块:

module MyApp::AssetHelper
  def config
    @config ||= ActionController::Base.config
    @config.asset_host = 'http://whereveryouhostyour.assets' #not needed if you have this defined in your environment file
    @config
  end

  def controller
    ActionController::Base
  end
end

我在模型中包含了以下帮助程序,我想使用asset_tag帮助程序

include Sprockets::Helpers::RailsHelper
include MyApp::AssetHelper

这使我可以在需要的地方调用asset_tag助手。