2016-02-26 56 views
0

我试图通过以下this tutorial来使联系表单工作,但在我提交表单后,我仍然存在错误:uninitialized constant ApplicationMailer未初始化的常量ApplicationMailer

痕迹提供以下信息:

app/mailers/message_mailer.rb:1:in <top (required)>' 
app/controllers/messages_controller.rb:9:in create' 
actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:4:in send_action' 
actionpack (4.2.5) lib/abstract_controller/base.rb:198:in process_action' 
actionpack (4.2.5) lib/action_controller/metal/rendering.rb:10:in process_action' 
actionpack (4.2.5) lib/abstract_controller/callbacks.rb:20:in block in process_action' 
activesupport (4.2.5) lib/active_support/callbacks.rb:117:in call' 
activesupport (4.2.5) lib/active_support/callbacks.rb:117:in call' 
activesupport (4.2.5) lib/active_support/callbacks.rb:555:in block (2 levels) in compile' 
activesupport (4.2.5) lib/active_support/callbacks.rb:505:in call' 
activesupport (4.2.5) lib/active_support/callbacks.rb:505:in call' 
activesupport (4.2.5) lib/active_support/callbacks.rb:92:in __run_callbacks__' 
activesupport (4.2.5) lib/active_support/callbacks.rb:778:in _run_process_action_callbacks'` 

这里有文件,我有: 控制器/ messages_controller.rb

class MessagesController < ApplicationController 
def new 
    @message = Message.new 
end 
def create 
@message = Message.new(message_params) 

if @message.valid? 
    MessageMailer.message_me(@message).deliver_now 
    redirect_to new_message_path, notice: "Thankyou for your message." 
else 
    render :new 
end 
end 

private 

def message_params 
    params.require(:message).permit(:name, :email, :subject, :content) 
end 
end 

型号/ message.rb

class Message 
include ActiveModel::Model 
attr_accessor :name, :email, :subject, :content 
validates :name, :email, :subject, :content, presence: true 
end 

邮寄/ message_mailer.rb

class MessageMailer < ApplicationMailer 

default :to => "[email protected]" 
def message_me(msg) 
    @msg = msg 

    mail from: @msg.email, subject: @msg.subject, body: @msg.content 
end 
end 
+0

你有应用程序/邮寄/ application_mailer.rb?您是否在生成邮件程序后尝试重新启动服务器? – Shani

回答

3

你必须创建ApplicationMailer类,从的ActionMailer继承::基地。

application_mailer.rb

class ApplicationMailer < ActionMailer::Base 
    default from: '[email protected]' 
    layout 'mailer' 
end 

您也可以直接继承的ActionMailer :: Base的你MessageMailer

class MessageMailer < ActionMailer::Base 

default :to => "[email protected]" 
def message_me(msg) 
    @msg = msg 

    mail from: @msg.email, subject: @msg.subject, body: @msg.content 
end 
end 
相关问题