2016-12-13 4 views
0

Loaderror in CandidatesController # erstellenKönnte jemand den folgenden Ruby on Rails-Fehler erklären?

Unable to autoload constant Usermailer , expected Z:/railsassignment/student/app/mailers/usermailer.rb to define it

Wenn ich ein Formular ich den Fehler, der oben erhalten. Das Formular verarbeitet einen Datensatz, und der Kandidat wird der Datenbank hinzugefügt. Die Begrüßungs-E-Mail, die ich an den neu registrierten Kandidaten senden möchte, wird jedoch nicht gesendet, und der obige Fehler verhindert, dass der Benutzer fortfährt.

Kandidaten-Controller

def create 
    @candidate = Candidate.new(candidate_params) 

respond_to do |format| 
    if @candidate.save 
    Usermailer.welcome(@candidate).deliver_now ***<-- Error highlights this line*** 
    format.html { redirect_to @candidate, notice: 'User was successfully  
    created.' } 
    format.json { render :show, status: :created, location: @candidate } 
    else 
    format.html { render :new } 
    format.json { render json: @candidate.errors, status: 
:unprocessable_entity } 
    end 
end 
end 

usermailer.rb

Z: /railsassignment/student/app/mailers/usermailer.rb (usermailer Verzeichnis)

class UserMailer < ActionMailer::Base 
default from: "[email protected]" 

def welcome(candidate) 
@candidate = candidate 
mail(:to => candidate.can_email, :subject => "Welcome to EmployeMe.com, You  
have registered successfully!") 
end 
end 

Sollte Sie müssen sehen, dass weitere Dateien mir einen Kommentar hinterlassen, und ich werde sie schnell hinzufügen die Frage.

+3

'Usermailer'! =' UserMailer' – Stefan

Antwort

3

Es scheint wie ein Fall von verwirrten Namenskonvention.

Per Rails Namenskonvention, Dateinamen sollte in CamelCase in snake_case und Klassennamen sein. In Ihrem Szenario sollte der Dateiname user_mailer.rb sein.

umbenennen Also entweder usermailer.rb-user_mailer.rb oder Klassennamen UserMailer zu Usermailer.

+1

Entweder 'Usermailer' und' usermailer.rb' oder 'UserMailer' und' user_mailer.rb'. – Stefan

+0

@Stefan: Danke, lass mich die Antwort bearbeiten. –

+0

Also, wenn ich usermailer.rb zu user_mailer.rb ändern, tritt der folgende Fehler auf: NameError in CandidatesController # create nicht initialisierte Konstante CandidatesController :: Usermailer. Es bezieht sich auf die selbe Zeile, die im Original Q markiert wurde. –

1

Verwenden Sie immer Snake Case für Ihre Dateinamen.

Z:/railsassignment/student/app/mailers/user_mailer.rb 

NICHT:

Z:/railsassignment/student/app/mailers/usermailer.rb 

Verwenden Sie immer Kamel Fall für Ihre Klassennamen

UserMailer.welcome(@candidate).deliver_now 

NICHT:

Usermailer.welcome(@candidate).deliver_now 

Wenn Sie interessiert, wie Konstanten Laden mit Schienen funktioniert, könnten Sie einen Blick auf this werfen.

Verwandte Themen