我很难找到“Rails Way”来为邮件添加电子邮件确认网址。
我选择不完全以REST身份执行此操作,因为文本电子邮件很难处理,因为他们无法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
这一切都有效,除非我致电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" }
答案 0 :(得分:0)
为了访问请求对象,您应该在邮件程序的控制器中实现此功能,并将其传递给带有变量的模板。
应用程序/邮寄者/ emailer.rb
@tracking_url = "http://#{request.host}:#{request.port}/confirm/#{token}"
应用程序/视图/的emailer / template_name.html.erb
<%= link_to 'name', @tracking_url %>
答案 1 :(得分:0)
使用已有的网址加连接怎么样?即您可以使用root_path
和root_url
,然后连接并且行为与rails完全相同!
例如,你可以这样做:
def mystrangemethod_url(option1, option2)
"#{ root_url }/#{ option1 }/#{ option2 }"
end
你完成了。简单且唯一的要求是设置在routes.rb中设置根路径。还有你在development.rb中设置的选项,它也可以在邮件程序中使用。
答案 2 :(得分:0)
我最近编写了一个帮助器,将我的_url
方法转换为ActionDispatch::Http::URL.full_url_for
方法。
Rails使用_url
生成Rails.application.routes.default_url_options
方法,并传入host
以设置port
,protocol
和ActionDispatch::Http::URL.full_url_for(Rails.application.routes.default_url_options.merge(path: path))
。
这意味着您可以使用
从给定路径生成网址def self.url_helper(route_name)
define_method("#{route_name}_url") do |*args|
path = public_send(:"#{route_name}_path", *args)
options = Rails.application.routes.default_url_options.merge(path: path)
ActionDispatch::Http::URL.full_url_for(options)
end
end
我正在进行的工作助手看起来像:
email_confirm_url
然后可以将其与路径助手结合使用以构建url_helper :email_confirm
def email_confirm_path(token)
"/confirm/#{token}"
end
方法:
PS C:\src\t> $s = '2018/05/21 21:21:54.118, GeForce GTX 1060 6GB, 00000000:01:00.0, 63, 100 %, 93 %'
PS C:\src\t> $s -match '.*, (\d*) %, (\d*) %$'
True
PS C:\src\t> $Matches
Name Value
---- -----
2 93
1 100
0 2018/05/21 21:21:54.118, GeForce GTX 1060 6GB, 00000000:01:00.0, 63, 100 %, 93 %
PS C:\src\t> $Matches[1]
100
PS C:\src\t> $Matches[2]
93