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)
Update
Я использую _url
форму хелпера, т.е. my_helper_url
Ответы
Ответ 1
Для 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
Ответ 2
Я столкнулся с той же проблемой, но с Концерном, я не смог использовать какой-либо помощник URL в моем коде, даже используя напрямую Rails.application.routes.url_helpers.administrator_beverages_url
Я получал эту ошибку:
undefined method `administrator_beverages_url' for #<Module:0x00000002167158> (NoMethodError)
даже не смог использовать консоль рельсов из-за этой ошибки, единственный способ, которым я решил это решить, - использовать этот код в моем Концерне
module SimpleBackend
extend ActiveSupport::Concern
Rails.application.reload_routes! #this did the trick
.....
Проблема заключалась в том, что Rails.application.routes.url_helpers был пуст в момент инициализации. Я не знаю, как это влияет на производительность, но для моего случая это небольшое приложение, и я могу взять пулю.
Ответ 3
В почтовом ящике добавьте
helper :my
или помощник, который вам нужен
и он будет загружать приложение/помощники/my_helper.rb и включает MyHelper
Enjoy
Ответ 4
Помощники маршрута рельсов находятся в Rails.application.routes.url_helpers
. Вы должны просто уметь
include Rails.application.routes.url_helpers
в верхней части вашего класса, хотя я не тестировал этот
Ответ 5
Пожалуйста, взгляните на этот блог, в котором объясняется, как вы можете правильно использовать Rails.application.routes.url_helpers.
http://hawkins.io/2012/03/generating_urls_whenever_and_wherever_you_want/
Ответ 6
Я столкнулся с этой проблемой, работая с недавно добавленным маршрутом, который, как представляется, недоступен в моем Mailer. Моя проблема была в том, что мне нужно было перезапустить всех рабочих, чтобы они забрали недавно добавленный маршрут. Просто оставив эту сноску здесь, если кто-то столкнется с тем же вопросом, может быть сложно решить, если вы не знаете, что это происходит.
Ответ 7
Это нарушило мои другие маршруты.
# 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
Ответ 8
Вам нужно использовать my_helper_url