Доступ к общедоступному каталогу Ruby on Rails без относительного пути - PullRequest
1 голос
/ 16 июня 2010

У меня есть флэш-объект, который я хочу загрузить, и я считаю, что лучшее место для хранения этого ресурса - это каталог 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 ]

3 голосов
/ 16 июня 2010

Альтернативным методом является расширение 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

Для справки Документация на ActionView::Helpers::AssetTagHelper.

2 голосов
/ 16 июня 2010

Разве это не сработает?

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...