2010-06-16 5 views
1

У меня есть Flash-объект, который я хочу загрузить, и я считаю, что лучшее место для хранения этого ресурса находится в каталоге public. Предположим, что он хранится в public/flash, должен быть лучший путь к swf, чем то, что я сделал ниже. Обратите внимание на элемент данных, он имеет относительный путь.Доступ к общедоступной директории 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 

Последние работает только если у вас есть root маршрут в файле routes.rb. Он будет указывать на корень вашего сайта (например, http://example.com/), который является в основном папкой public.

+0

Корень косы сделал трюк, спасибо. – chrishunt

3

Альтернативный метод заключается в расширении ActionView::Helpers::AssetTagHelper, что наиболее полезно, если вы используете серверы ресурсов. Это модуль, который уже реализует javascript_path и stylesheet_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 documentation на ActionView::Helpers::AssetTagHelper.

+0

Это элегантно. Мне это нравится, спасибо. – chrishunt