Rails-URL帮助程序无法在邮件中工作



我尝试过:

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

对于Rails5,我将url助手包含在我的mailer文件中:

# 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

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

# 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-操作中的url mailer视图

我遇到了同样的问题,但由于存在问题,我无法在代码中使用任何url帮助程序,即使直接使用Rails.application.routes.url_helpers.administrator_beverages_url,我也会收到以下错误:

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

即使因为这个错误而无法使用rails控制台,我发现解决这个问题的唯一方法就是在我的Concern 中使用这个代码

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

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

在邮件中添加

helper :my

或者你需要的助手

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

享受

铁轨路线助手位于Rails.application.routes.url_helpers中。你应该能够include Rails.application.routes.url_helpers是你班的佼佼者,尽管我还没有测试过这个

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

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

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

您需要使用my_helper_url

相关内容

  • 没有找到相关文章

最新更新