Rails:在ActionMailer视图中生成完整的URL

Mik*_*ton 16 host ruby-on-rails actionmailer url-for

我正在使用ActionMailer发送注册确认电子邮件.电子邮件需要包含一个返回网站的链接以验证用户,但我无法说服Rails生成完整的URL(包括域等).

我正在使用:

<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
Run Code Online (Sandbox Code Playgroud)

在我看来

b部分:

在开发模式下,如果我没有在上面的链接中指定主机explicilty,则Rails会抱怨.但我不想在制作中这样做.有解决方案吗

Sim*_*tti 17

要解决在ActionMailer中传递主机以生成URL的问题,请查看此插件以及我编写它原因.

要解决第一个问题,请在适用时使用命名路由.代替

<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
Run Code Online (Sandbox Code Playgroud)

假设路由被调用login,请使用

<%= login_url(:guid => @user.new_user.guid) %>
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用login_url,而不是login_path.


Kyl*_*ylo 12

我不确定它是否是您想要的,但在config/environments/development.rb中,您可以指定邮件程序URL的默认选项

config.action_mailer.default_url_options = {
  :host => "your.host.org",
  :port => 3000
}
Run Code Online (Sandbox Code Playgroud)

你可以在config/environments/production.rb中做同样的事情

  • 我正在使用你没有提供的语法:主机部分,我正在获取完整的URL.:only_path => false很重要. (3认同)

bel*_*nta 6

我不知道为什么之前的解决方案看起来如此复杂,但既然我在这里为什么不给我2美分......

转到/config/environments并添加:

config.absolute_site_url = 'your site url'

对于相应的环境(即在development.rb,test.rb或production.rb中).重启Web服务器.

这允许您调用Rails.application.config.absolute_site_url以获取所需的URL.不需要插件或奇怪的作弊,只需将站点url存储为应用程序范围的变量.