访问Ruby on Rails的'public'目录,没有相对路径

时间:2010-06-16 18:00:04

标签: ruby-on-rails

我有一个我希望加载的flash对象,我相信存储该资产的最佳位置是public目录。假设它存储在public/flash中,必须有一个更好的方法来转向swf,而不是我在下面所做的。注意'data'元素,它有一个相对路径。

def create_vnc_object
  haml_tag :object, 
    :id => 'flash',
    :width => '100%', 
    :height => '100%',
    :type => 'application/x-shockwave-flash', 
    :data => '../../flash/flash.swf' do
      haml_tag :param, 
        :name => 'movie',
        :value => '../../flash/flash.swf'
  end
end

是否有某些rails变量指向public

2 个答案:

答案 0 :(得分:3)

另一种方法是扩展ActionView::Helpers::AssetTagHelper,这在您使用资产服务器时最有用。这是已经实现javascript_pathstylesheet_path的模块。你可以这样做:

module ActionView
  module Helpers
    module AssetTagHelper
      def flash_movie_path(source)
        compute_public_path(source, 'flash', 'swf')
      end
      alias_method :path_to_flash_movie, :flash_movie_path
    end
  end
end

供参考,ActionView::Helpers::AssetTagHelper上的the documentation

答案 1 :(得分:2)

这不会起作用吗?

def create_vnc_object
  haml_tag :object, 
    :id => 'flash',
    :width => '100%', 
    :height => '100%',
    :type => 'application/x-shockwave-flash', 
    :data => '/flash/flash.swf' do
      haml_tag :param, 
        :name => 'movie',
        :value => '/flash/flash.swf'
  end
end

或者,您可以使用root_url作为前缀:

def create_vnc_object
  haml_tag :object, 
    :id => 'flash',
    :width => '100%', 
    :height => '100%',
    :type => 'application/x-shockwave-flash', 
    :data => root_url + 'flash/flash.swf' do
      haml_tag :param, 
        :name => 'movie',
        :value => root_url + 'flash/flash.swf'
  end
end

后者只有在root文件中有routes.rb路由时才有效。它会指向您网站的根目录(例如http://example.com/),它基本上是public文件夹。