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"