Rails - 不在邮件程序中工作的URL帮助程序

时间:2013-07-21 18:03:42

标签: ruby-on-rails actionmailer urlhelper

我试过了:

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

8 个答案:

答案 0 :(得分:11)

对于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

答案 1 :(得分:2)

我遇到了同样的问题,但是有了一个问题,我甚至无法使用我的代码中的任何网址助手,即使直接使用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在初始化时是空的。我不知道使用它的性能影响,但对于我的情况,这是一个小应用程序,我可以采取子弹。

答案 2 :(得分:0)

在邮件中添加

helper :my

或您需要的助手

它会加载app / helpers / my_helper.rb&amp;包括MyHelper

享受

答案 3 :(得分:0)

铁路路线助手位于Rails.application.routes.url_helpers。你应该只能放 include Rails.application.routes.url_helpers位于班级的顶层,但我没有测试过这个

答案 4 :(得分:0)

请查看此博客,其中介绍了如何以正确的方式使用Rails.application.routes.url_helpers。

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

答案 5 :(得分:0)

我在处理一个似乎在我的邮件程序中无法使用的新添加的路线时遇到了这个问题。我的问题是我需要重新启动所有工人,所以他们会选择新添加的路线。只要将此脚注留在此处以防万一有人遇到同样的问题,如果您不知道这种情况发生就很难解决。

答案 6 :(得分:0)

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

# 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

答案 7 :(得分:-2)

您需要使用my_helper_url