NameError (неинициализированная константа Welcome4Controller::EmailMe2Mailer): RAILS

У меня есть простая форма ruby ​​on rails, которая размещена с помощью ajax. Тем не менее, я продолжаю получать эту ошибку:

NameError (неинициализированная константа Welcome4Controller:: EmailMe2Mailer):

app / controllers / welcome4_controller.rb: 3: в контакте

Это форма:

<%= 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

1 ответ

Решение

NameError (неинициализированная константа Welcome4Controller::EmailMe2Mailer):

Это из-за неправильного имени файла. Так должно быть email_me2_mailer.rb тогда как у вас это как email_me_2_mailer.rb Меняя его на email_me2_mailer.rb должен исправить вашу проблему.

Обычно Rails ожидает, что имена файлов будут в snake_case в отношении имен классов, являющихся CamelCase, Вы можете использовать подчеркивание, чтобы проверить snake_case строка для EmailMe2Mailer как ниже

"EmailMe2Mailler".underscore
 => "email_me2_mailler"
Другие вопросы по тегам