Wo platziere ich Hilfsmethoden für Action Ansichten?
-
02-10-2019 - |
Frage
Ich habe eine Methode, die ein Array von Strings nimmt und schließt sich ihnen an, so dass sie so etwas tun:
>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"
Was ich meine Mailer möchte den Zugang zu haben, um so kann ich Ausgabe von Informationen in einer E-Mail. Ich kann nicht scheinen, einen guten Platz zu finden, sie zu setzen und es in der application_helper.rb Datei setzen und sie findet es nicht da. Wo soll es gehen?
Lösung
die helper
Methode in Ihrer Mailer die Hilfsklasse Verwendung zu definieren
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
# my_mailer.rb
class MyMailer < ActionMailer::Base
helper MailerHelper
…
end
dann können Sie die Methoden in Aussicht als auch verwendet werden.
Andere Tipps
Es würde sich lohnen, Blick auf die to_sentence
Erweiterungsmethode für Arrays, die Schienen bereitstellt.
Eine bereits beantworteten Frage, aber ich habe nicht bekommen, wo / was-Datei von den anderen SO Antworten zu ändern. Hier ist, wie ich es getan hätte:
Am Ende der app / config / initializers / devise.rb können Sie hinzufügen, um dieses:
Devise::Mailer.class_eval do
helper :application # includes "ApplicationHelper"
end
In diesem Beispiel werden die Methoden in /app/helpers/application_helper.rb umfassen. Sie könnten einen anderen Helfer-Datei stattdessen umfassen - wenn zum Beispiel das Verfahren nur für den Mailer ist oder nur für einen anderen Controller verwendet. Die def I benötigt wird überall verwendet, so dass ich in in der Datei eingeben, damit alle Ansichten auf sie zugreifen können.
1, funktioniert gut, nur eine wenig Korrektur:
Sie müssen Verwendung Modul statt Klasse in der Helfer-Datei:
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
In meinem Fall für Rails 5.1, hatte ich beide zu verwenden sind und Hilfsmethoden, wie diese:
include ApplicationHelper
helper :application
Und dann gehen Sie einfach normalerweise die Methode zu verwenden.
class MyMailer < ActionMailer::Base
include ApplicationHelper
helper :application
def my_mailer_method
my_helper_method_declared_in_application_helper
..
end
end
Wenn Sie einige einmalige Methoden haben Sie in der Ansicht verwenden möchten, können Sie helper_method
direkt in Ihrem Mailer verwenden können.
class MyMailer < ApplicationMailer
def mailer
mail to: '', subject: ''
end
private
helper_method def something_to_use_in_the_view
end
end
something_to_use_in_the_view
wird Ihrer Ansicht nach zur Verfügung.