未初始化的常量 ApplicationMailer

Jae*_*ger 0 ruby model-view-controller ruby-on-rails

我正在尝试按照本教程制作联系表单,但我一直遇到错误:uninitialized constant 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'`
Run Code Online (Sandbox Code Playgroud)

这是我的文件: controllers/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
Run Code Online (Sandbox Code Playgroud)

模型/消息.rb

class Message
 include ActiveModel::Model
 attr_accessor :name, :email, :subject, :content
 validates :name, :email, :subject, :content, presence: true
end
Run Code Online (Sandbox Code Playgroud)

邮件程序/message_mailer.rb

class MessageMailer < ApplicationMailer

default :to => "jd.levarato@gmail.com"
def message_me(msg)
  @msg = msg

  mail from: @msg.email, subject: @msg.subject, body: @msg.content
end
end
Run Code Online (Sandbox Code Playgroud)

Ali*_*din 5

您必须创建从 ActionMailer::Base 继承的 ApplicationMailer 类。

application_mailer.rb

class ApplicationMailer < ActionMailer::Base
  default from: 'from@exmaple.com'
  layout 'mailer'
end
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地将 ActionMailer::Base 继承到您的 MessageMailer

class MessageMailer < ActionMailer::Base

default :to => "jd.levarato@gmail.com"
def message_me(msg)
  @msg = msg

  mail from: @msg.email, subject: @msg.subject, body: @msg.content
end
end
Run Code Online (Sandbox Code Playgroud)