Dove metto metodi di supporto per le viste ActionMailer?
-
02-10-2019 - |
Domanda
Ho un metodo che accetta un array di stringhe e si unisce a loro in modo da fare qualcosa di simile:
>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"
Che Vorrei che il mio programma di posta di avere accesso a così posso uscita qualche informazione in un'email. Io non riesco a trovare un buon posto per mettere e mettendolo nel file application_helper.rb e non lo trova lì. Dove dovrebbe andare?
Soluzione
Utilizza il href="http://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html#method-i-helper" rel="noreferrer"> quindi è possibile utilizzare i metodi in vista pure. helper
metodo
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
# my_mailer.rb
class MyMailer < ActionMailer::Base
helper MailerHelper
…
end
Altri suggerimenti
Sarebbe la pena di guardare il metodo di estensione to_sentence
per gli array che Rails fornisce.
Una domanda già risposto, ma non ho ottenuto dove / cosa-file per modificare le altre risposte SO. Ecco come ho fatto:
Nella parte inferiore della app / config / inizializzatori / devise.rb è possibile aggiungere questo:
Devise::Mailer.class_eval do
helper :application # includes "ApplicationHelper"
end
In questo esempio includerà i metodi in /app/helpers/application_helper.rb. Si potrebbe includere un altro aiutante-file invece - se, ad esempio, il metodo è solo per il mailer o utilizzati per un solo controller. Il def Avevo bisogno è utilizzato in tutto, così ho messo in in quel file in modo tutte le viste potessero accedervi.
1, finemente lavorato, solo una piccola correzione:
Devi usare modulo al posto di class nel file helper:
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
Nel mio caso, per Rails 5.1, ho dovuto usare entrambi includono e metodi di supporto, come questo:
include ApplicationHelper
helper :application
E poi basta procedere per utilizzare il metodo normalmente.
class MyMailer < ActionMailer::Base
include ApplicationHelper
helper :application
def my_mailer_method
my_helper_method_declared_in_application_helper
..
end
end
Se avete un po 'una tantum metodi che si desidera utilizzare nella vista, è possibile utilizzare helper_method
direttamente nel vostro programma di posta.
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
sarà disponibile nel vostro punto di vista.