5
4

3 回答 3

1

我最近写了一个助手来将我_path的方法转换为_url方法。

Rails 用于ActionDispatch::Http::URL.full_url_for生成_url方法,并传入Rails.application.routes.default_url_options设置hostportprotocol.

这意味着您可以使用给定路径生成 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_pathand root_url,然后你连接并且行为与 rails 完全相同!

例如,您可以这样做:

def mystrangemethod_url(option1, option2)
  "#{ root_url }/#{ option1 }/#{ option2 }"
end

你完成了。很简单,唯一的要求是在 routes.rb 中设置你的根路径。此外,使用您在 development.rb 中设置的选项,它也可以在邮件程序中使用。

于 2014-02-04T18:42:34.443 回答