json响应中的Carrierwave + Mongoid完整URL

时间:2012-01-16 16:27:09

标签: ruby-on-rails-3.1 mongoid carrierwave

我正在尝试为移动应用构建api并使用Carrierwave和Mongoid。上传和检索图像时一切正常,但是当我生成json响应时,图片网址只显示路径/ to / image.png而不是http://localhost:3000/path/to/image.png

如何让我的应用生成图片的完整网址。我在谷歌上进行了广泛的搜索,但无法找到任何可靠的解决方案。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我不认为你可以默认使用carrierwave来做这件事,但你可以通过这个猴子补丁来解决这个问题

module CarrierWave::Uploader::Url
  def url
    if $request
      if file.respond_to?(:url) and not file.url.blank?
        $request.protocol + $request.host_with_port + file.url
      elsif current_path
        $request.protocol + $request.host_with_port + (base_path || "") + File.expand_path(current_path).gsub(File.expand_path(root), '')
      end
    else
      raise ArgumentError, "Request object is empty"
    end

  end

end

由于您无法从上传器(任何型号)访问导轨session/request信息,因此您需要在before_filter中定义application_controller以加载请求数据

  before_filter :load_request

  def load_request
    $request = request
  end

我仅在本地存储/ mongoid中测试了此补丁。我不知道这将如何在亚马逊s3 /雾..

希望这有帮助