2010-06-16 92 views
1

我有一个Flash对象我想加载,我相信存储该资产的最佳位置是在public目录中。假设它存储在public/flash中,那么必须有一个更好的路径才能到达swf,而不是我下面所做的。注意'data'元素,它有一个相对路径。访问Ruby on Rails'公共'目录没有相对路径

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 

是否有一些导轨变量指向public

回答

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 

后者的作品只有当你有你的routes.rb文件root路线。它会指向您网站的根目录(例如http://example.com/),它基本上是public文件夹。

+0

根斜杠做了伎俩,谢谢。 – chrishunt 2010-06-16 18:39:50

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 

仅供参考,the documentationActionView::Helpers::AssetTagHelper

+0

这是优雅的。我喜欢它,谢谢。 – chrishunt 2010-06-16 18:40:59