NameError(未初始化常量Welcome4Controller::EmailMe2Mailer):RAILS

NameError (uninitialized constant Welcome4Controller::EmailMe2Mailer): RAILS

我在 rails 表单上有一个简单的 ruby 与 ajax 一起发布。但是,我不断收到此错误:

NameError (uninitialized constant Welcome4Controller::EmailMe2Mailer):

app/controllers/welcome4_controller.rb:3:in `contact'

这是表格:

<%= form_for :contact, :remote => true, :method => :post, html: {:class => "form-stacked", id: 'contact_form' } do |f| %>

<div class="col-md-6">
    <div class="input-group input-group-lg wow fadeInUp" data-wow-delay='0.8s'>
        <span class="input-group-addon" id="sizing-addon1">
            <i class="fa fa-user" aria-hidden="true"></i>
        </span>
        <input type="text" class="form-control" aria-describedby='sizing-addon1' placeholder="Full Name" name="fullname" id="fullname" required>
    </div>

    <div class="input-group input-group-lg wow fadeInUp" data-wow-delay='1.2s'>
        <span class="input-group-addon" id="sizing-addon1">
            <i class="fa fa-envelope" aria-hidden="true"></i>
        </span>
        <input class="form-control" aria-describedby='sizing-addon1' placeholder="Email Address" required name="email" id="email">
    </div>

    <div class="input-group input-group-lg wow fadeInUp" data-wow-delay='1.6s'>
        <span class="input-group-addon" id="sizing-addon1">
            <i class="fa fa-phone" aria-hidden="true"></i>
        </span>
        <input class="form-control" aria-describedby='sizing-addon1' placeholder="Phone Number (optional)" name="phone" id="phone">
    </div>
</div>

<div class="col-md-6">
    <div class="input-group wow fadeInUp" data-wow-delay='2s'>
        <textarea class="form-control" cols="80" rows="6" name="message" placeholder="Type here..." style="width:100%" id="message" required></textarea>
    </div>
    <button class="btn btn-lg wow fadeInUp" data-wow-delay='2.4s' id="contact_btn"data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Sending" >Send Your Message</button>
</div>

<% end %>

这是控制器:

class Welcome4Controller < ApplicationController
  def contact
    EmailMe2Mailer.confirmation_2(params[:fullname,:email,:phone,:message]).deliver_now

    render json: { success: true }, status: 200
  end

  def index
  end
end

这是邮件程序:

class EmailMe2Mailer < ApplicationMailer
    default from: "**@gmail.com"

  def confirmation_2(fullname,email,phone,message)
    @greeting = "Hi"
    @fullname = fullname
    @email = email
    @phone = phone
    @message = message

    mail to: "**@gmail.com", subject: "contact email"
  end
end

这是 ajax 调用:

$('#contact_form').submit(function(e) {
    e.preventDefault();
  }).validate({ 
    rules: {
      fullname: {
        required: true,

      },
      email: {
        required: true,
        email: true
      },
      message: {
        required: true,
        minlength: 5
      }
    },
    submitHandler: function (form) {

      var btn = $('#contact_btn');
      btn.button('loading');
      setTimeout(function() {
        btn.button('reset');
      }, 8000);

      $.ajax({
        type: 'POST',
        url: '/contact',
    // data: form.serialize(),
    dataType: 'json',
    async: true,
    data: {

      fullname: $('#fullname').val(),
      email: $('#email').val(),
      phone: $('#phone').val(),
      message: $('#message').val()
    },

    success: function (json) {
      $('#contact').hide();
      $('#output').html(
        '<i class="fa fa-check" aria-hidden="true" id="check" style="border-radius:50%;font-size:80px;text-align:center;color:#E81B00"></i><br><p class="lead" style="font-size:40px;">We have received your message!</p>'
        ).show();
    }
  });
     return false; // for demo
 } 
});

这里基本上是在抱怨向邮件程序传递多个参数:

EmailMe2Mailer.confirmation_2(params[:fullname,:email,:phone,:message]).deliver_now

这是 EmailMe2Mail 所在的位置:

app => mailers => email_me_2_mailer.rb

这是application_mail.rb

class ApplicationMailer < ActionMailer::Base
  default from: '**@gmail.com'
  layout 'mailer'
end

NameError (uninitialized constant Welcome4Controller::EmailMe2Mailer):

这是因为文件名 错误。它应该是 email_me2_mailer.rb 而你有它 email_me_2_mailer.rb 将它更改为 email_me2_mailer.rb 应该可以解决你的问题。

通常 Rails 期望 文件名 相对于 class 名CamelCase。您可以使用 underscore 来检查 snake_case 字符串中的 EmailMe2Mailer,如下所示

"EmailMe2Mailler".underscore
 => "email_me2_mailler"