问问题
3173 次
3 回答
1
我最近写了一个助手来将我_path
的方法转换为_url
方法。
Rails 用于ActionDispatch::Http::URL.full_url_for
生成_url
方法,并传入Rails.application.routes.default_url_options
设置host
、port
和protocol
.
这意味着您可以使用给定路径生成 URL
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
于 2018-05-22T01:59:50.813 回答
0
为了访问请求对象,您应该在您的邮件程序的控制器中实现此功能,并将其传递给带有变量的模板。
应用程序/mailers/emailer.rb
@tracking_url = "http://#{request.host}:#{request.port}/confirm/#{token}"
app/view/emailer/template_name.html.erb
<%= link_to 'name', @tracking_url %>
于 2013-01-11T03:58:14.497 回答
0
使用已经存在的 url 和连接怎么样?即你可以使用root_path
and root_url
,然后你连接并且行为与 rails 完全相同!
例如,您可以这样做:
def mystrangemethod_url(option1, option2)
"#{ root_url }/#{ option1 }/#{ option2 }"
end
你完成了。很简单,唯一的要求是在 routes.rb 中设置你的根路径。此外,使用您在 development.rb 中设置的选项,它也可以在邮件程序中使用。
于 2014-02-04T18:42:34.443 回答