Rails:使自定义URL帮助程序的行为类似于_path和_url帮助程序中内置的

Mel*_*emi 5 routes ruby-on-rails helper urlhelper

我很难找到"Rails Way"来为邮件添加电子邮件确认网址.

我选择不完全RESTful这样做,因为它很难用文本电子邮件,因为它们无法PUT请求.

所以这是我的routes.rb: get 'confirm/:id' => 'Confirmations#confirm'

在我的邮件程序中,我想放置email_confirm_url(@user.email_token)我希望URL出现的位置.

我创建了一个帮手:

#app/helpers/confirmations_helper.rb
module ConfirmationsHelper
  def email_confirm_url(token)
    "/confirm/#{token}"
  end  
end
Run Code Online (Sandbox Code Playgroud)

这一切都有效,除非我打电话给email_confirm_url(@user.email_token)...

我真的得到:" /confirm/abcdefg…"

当我想要的是: http://myhostname/confirm/abcdefg…

或者在开发中: http://localhost:3000/confirm/abcdefg…

如何使我的URL帮助程序更像Rails中的内置<resource>_path<resource>_url帮助程序?虽然实际上我认为我真的只需要 _url.

#Edit:我在我的环境配置中有这个:

#config/environments/development.rb
...
config.action_mailer.default_url_options = { :host => "localhost:3000" }
Run Code Online (Sandbox Code Playgroud)

zar*_*zan 0

为了访问请求对象,您应该在邮件程序的控制器中实现此函数,并使用变量将其传递给模板。

应用程序/mailers/emailer.rb

@tracking_url = "http://#{request.host}:#{request.port}/confirm/#{token}"
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/电子邮件程序/template_name.html.erb

<%= link_to 'name', @tracking_url %>
Run Code Online (Sandbox Code Playgroud)