Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I set default host for url helpers in rails?

I would like to do something like this

config.default_host = 'www.subdomain.example.com' 

in some of my configuration files, so that object_url helpers (ActionView::Helpers::UrlHelper) produce links beginning with http://www.subdomain.example.com

I have tried to search the docs but I did not find anything except ActionMailer docs and http://api.rubyonrails.org/classes/Rails/Configuration.html which is not useful for me, because I do not know in which pat to look. Is there a place which describes the whole structure of Rails::Initializer.config?

like image 741
gorn Avatar asked Apr 17 '10 21:04

gorn


2 Answers

asset_host doesn't work for urls

You need to override default_url_options in your ApplicationController (at least in Rails 3)

http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

class ApplicationController < ActionController::Base   def default_url_options     if Rails.env.production?       {:host => "myproduction.com"}     else         {}     end   end end 
like image 193
Wilhelm Avatar answered Sep 26 '22 01:09

Wilhelm


Define the default host in your environment config:

# config/environments/staging.rb MyApp::Application.configure do   # ...   Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com'   # ... end 

Then you can create a URL anywhere in your app:

Rails.application.routes.url_helpers.widgets_url() 

Or include the URL helpers in your class:

class MyLib   include Rails.application.routes.url_helpers    def make_a_url     widgets_url   end end 

If you don't define the default host, you will need to pass it as an option:

widgets_url host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com') 

It's also useful to specify things like the protocol:

widgets_url protocol: 'https' 
like image 27
Andrew Avatar answered Sep 25 '22 01:09

Andrew