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?

È stato utile?

Soluzione

Utilizza il href="http://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html#method-i-helper" rel="noreferrer"> helper metodo

# mailer_helper.rb
module MailerHelper
  def and_join(arr)
    # whatever …
  end
end

# my_mailer.rb
class MyMailer < ActionMailer::Base
  helper MailerHelper
  …
end

quindi è possibile utilizzare i metodi in vista pure.

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.

scroll top