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?

War es hilfreich?

Lösung

Mit

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top