2016-12-14 2 views
1

ich eine einfache Schiene 5 Anwendung mit devise habe und wenn ich anmeldet und versuche, erhalte ich folgende Fehlermeldung:Rails 5: NoMethodError: nicht definierte Methode `Helfer‘ für MyMailer

NoMethodError in Devise::RegistrationsController#create undefined method `helper' for MyMailer(Table doesn't exist):Class

Der Fehler tritt in Zeile 2 :

class MyMailer < ApplicationRecord 
    helper :application # gives access to all helpers defined within `application_helper`. 
    include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` 
    default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views 
end 

Haben Sie eine Idee, warum diese Klasse meine Anwendung Helfer nicht finden kann?

+0

Warum verwenden Sie nicht "ApplicationHelper"? – dp7

Antwort

2

, ob es wirklich ein Mailer ist im Gegensatz zu einem Modell, sollten Sie wahrscheinlich von ApplicationMailer erben im Gegensatz zu ApplicationRecord, sonst gehen umfassen sollen in deiner Datenbank nach Tabellen suchen, um sie zu unterstützen.

class MyMailer < ApplicationMailer 
    ..... 
end 
1

Für jedes Modell, das Sie in Ihrer Rails-Anwendung haben, sollte eine Tabelle vorhanden sein, die nach der Pluralversion des Namens des Modells benannt ist. Also in Ihrem Fall, da der Name Ihres Modells ist: MyMailer so sollten Sie eine Tabelle mit dem Namen erstellen: my_mailers.

rails g migration create_my_mailers 
+0

Es sagt mir nun zu: '' method_missing ': undefinierte Methode 'helper' für MyMailer (rufe 'MyMailer.connection' auf, um eine Verbindung herzustellen): Class (NoMethodError)' Wo soll ich das machen? – jonhue

+0

Warum schreibst du: 'helfer: application'? Sie wollen Methoden aus 'ApplicationHelper', schreiben' include ApplicationHelper'. –

1

Der Fehler ist, weil Sie Helfer in Ihrem Mailer aufrufen. Wenn Sie den Anwendungshelfer oder einen Helfer in Ihren Mailer aufnehmen möchten, müssen Sie das Schlüsselwort "include" verwenden.

class MyMailer < ApplicationRecord 
    helper :application # This line is causing the error 
    include Devise::Controllers::UrlHelpers 
    default template_path: 'devise/mailer' 
end 

Dies ist, wie Sie Ihre Anwendung Helfer wird

class MyMailer < ApplicationRecord 
    include ApplicationHelper 
    include Devise::Controllers::UrlHelpers 
    default template_path: 'devise/mailer' 
end 
Verwandte Themen