14

我试过了:

class MyMailer
  def routes
    Rails.application.routes.url_helpers
  end

  def my_mail
    @my_route = routes.my_helper
    ... code omitted 
  end

也在邮件中:

include Rails.application.routes.url_helpers

def my_mail
  @my_route = my_helper

另外,简单的方法,在邮件模板中:

= link_to 'asd', my_helper

但是当我尝试启动控制台时,我得到:

undefined method `my_helper' for #<Module:0x007f9252e39b80> (NoMethodError)

更新

我正在使用_url助手的形式,即my_helper_url

4

8 回答 8

16

对于 Rails 5,我将 url 助手包含在我的邮件文件中:

# mailers/invoice_mailer.rb
include Rails.application.routes.url_helpers

class InvoiceMailer < ApplicationMailer
    def send_mail(invoice)
        @invoice = invoice
        mail(to: @invoice.client.email, subject: "Invoice Test")
    end
end
于 2017-01-30T17:44:49.390 回答
3

这样做打破了我的其他路线。

# mailers/invoice_mailer.rb
include Rails.application.routes.url_helpers

这样做不是正确的方法,这将破坏应用程序,因为路由正在重新加载,并且路由将不可用是那些正在重新加载

module SimpleBackend
    extend ActiveSupport::Concern
    Rails.application.reload_routes!

正确的答案是在电子邮件模板中使用 *_url 而不是 *_path 方法,如下面的 Rails 文档中所述。

https://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-in-action-mailer-views

于 2018-10-01T00:13:56.230 回答
2

我遇到了同样的问题,但是有一个问题,我无法在我的代码中使用任何 url 帮助程序,即使直接使用 Rails.application.routes.url_helpers.administrator_beverages_url我也收到了这个错误:

undefined method `administrator_beverages_url' for #<Module:0x00000002167158> (NoMethodError)

由于此错误,甚至无法使用 rails 控制台我发现解决此问题的唯一方法是在我的关注中使用此代码

module SimpleBackend
    extend ActiveSupport::Concern
    Rails.application.reload_routes! #this did the trick
.....

问题是 Rails.application.routes.url_helpers 在初始化时是空的。我不知道使用它对性能的影响,但就我而言,这是一个小型应用程序,我可以接受。

于 2013-11-22T15:56:05.630 回答
0

rails 路线助手位于Rails.application.routes.url_helpers. 您应该能够 include Rails.application.routes.url_helpers在班级中名列前茅,尽管我尚未对此进行测试

于 2013-07-21T22:15:35.857 回答
0

在邮件中添加

helper :my

或您需要的帮手

它将加载 app/helpers/my_helper.rb 并包括 MyHelper

享受

于 2013-07-21T18:09:48.020 回答
0

我在处理我的 Mailer 中似乎不可用的新添加路由时遇到了这个问题。我的问题是我需要重新启动所有工人,所以他们会选择新添加的路线。把这个脚注留在这里,以防有人遇到同样的问题,如果你不知道这种情况正在发生,解决起来可能会很棘手。

于 2016-01-12T15:45:51.070 回答
-1

请看一下这个博客,它解释了如何以正确的方式使用 Rails.application.routes.url_helpers。

http://hawkins.io/2012/03/generating_urls_whenever_and_wherever_you_want/

于 2014-11-24T11:09:04.720 回答
-2

您需要使用my_helper_url

于 2013-07-21T21:30:30.853 回答