Reputation: 17
I have a flash object I wish to load and I believe the best place to store that asset is in the public
directory. Suppose it's stored in public/flash
, there must be a better way to path to the swf than what I've done below. Note the 'data' element, it has a relative path.
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
Is there some rails variable that points to public
?
Upvotes: 1
Views: 2988
Reputation: 19943
An alternative method is to extend ActionView::Helpers::AssetTagHelper
, which is most useful if you're using asset servers. This is the module that already implements javascript_path
and stylesheet_path
. You could do it like this:
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
For reference, the documentation on ActionView::Helpers::AssetTagHelper
.
Upvotes: 3
Reputation: 11596
Wouldn't this work?
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
Alternatively you could use the root_url
as the prefix:
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
The latter works only if you have the root
route in your routes.rb
file. It will point to the root of your site (e.g. http://example.com/
) which is basically the public
folder.
Upvotes: 2