views:

384

answers:

2

I'm using ActionMailer to send a sign up confirmation email. The email needs to contain a link back to the site to verify the user, but I can't persuade Rails to generate a full URL (including the domain etc).

I'm using:

<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>

in my view

Part b:

In development mode Rails gripes if I don't specify the host explicilty in the link above. But I don't want to do this in production. Any solutions?

A: 

I'm not sure if it is what you want but in config/environments/development.rb you can specify default options for mailer urls

config.action_mailer.default_url_options = {
  :host => "your.host.org",
  :port => 3000
}

you can do the same in config/environments/production.rb

Kylo
That solves part b, but I'm still getting a relative url.
Mike Sutton
I'm using syntax that you've provided without :host part, and I'm getting full URLs. :only_path => false is important.
Kylo
A: 

To solve the problem to pass a host for generating URLs in ActionMailer, check out this plugin and the reason why I wrote it.

To solve the first issue, use named routes when applicable. Instead of

<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>

assuming the route is called login, use

<%= login_url(:guid => @user.new_user.guid) %>

Note, I'm using login_url, not login_path.

Simone Carletti