如何在Rails 3.1中获取资产的绝对URL?

Ste*_*ven 47 ruby-on-rails ruby-on-rails-3

image_path 仅返回路径(无主机).

url_for助手将不会接受一个单一的路径,所以像url_for(image_path('image.png'))行不通的.而内部url_forActionDispatch::Http::Url.url_for似乎做的伎俩(),似乎没有成为它的公共接口.

我应该怎么做呢?最终,有一个像路由image_url一样的函数是很好的,url_for所以我可以调用image_url('image.png')并获得所有的绝对URL default_url_options.

tig*_*tig 51

def image_url(source)
  URI.join(root_url, image_path(source))
end
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以使用assets_host或连接root_url.


Jof*_*din 14

试试这个application_helper.rb(来自Spike页面上的一条评论):

def image_url(source)
  "#{root_url}#{image_path(source)}"
end
Run Code Online (Sandbox Code Playgroud)

  • 删除额外的斜杠:`def image_url(source)"#{root_url [0 ...- 1]}#{image_path(source)}"end` (12认同)

cou*_*mas 7

我们的生产和暂存资产位于s3/cloudfront ......但不是本地/ dev.所以我写了这个(可能是矫枉过正,可能会简化):

  def get_digest_file(source)
     return asset_path(source.to_s.downcase) unless Rails.application.config.assets.digests.present?
     return ActionController::Base.asset_host + "/assets/" + Rails.application.config.assets.digests[source.to_s.downcase]
  end
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 5

看起来,最近,sass-rails现在以image_url预期的方式解释scss文件中的命令,解析到所讨论的图像的最终位置.

  • 在Sass之外有什么办法吗?`image_url`在视图中不起作用. (2认同)