【发布时间】:2016-01-17 17:13:29
【问题描述】:
我继承了一个静态网站,主页上有一个典型的联系表单,其中包含姓名、电子邮件、电话和消息,并且应该在提交时将电子邮件发送到设置的电子邮件地址。下面的 JS 和 Slim 部分是给我的。我现在正在尝试使用 ActionMailer 连接到 Rails,但我在表单参数和/或电子邮件对象的构建方面做错了。我不希望将其存储在数据库中(尝试使用和不使用模型)。
路线:
resources :contacts, only: [:new, :create]
_contact_form.slim
(我改变的只是action 值)
form#contactform.form-horizontal action="/contacts" method="post" name="contactform" role="form"
/! Field 1
.row
.col-md-6
h3 name:
.input-text.form-group.left-field
input.input-name.form-control name="contact_name" type="text" /
.col-md-6
h3 Phone:
.input-text.form-group
input.input-name.form-control name="contact_phone" type="text" /
/! Field 2
h3 Email:
.input-email.form-group
input.input-email.form-control name="contact_email" type="email" /
/! Field 3
h3 Message:
.textarea-message.form-group
textarea.textarea-message.form-control name="contact_message" rows="7"
/! Button
button.btn.btn-default type="submit"
| Submit
i.flaticon-arrow209
Javascript:
(我设置了url并添加了beforeSend)
/* --------------------------------------------
Contact Form
-------------------------------------------- */
$(function($) {
$('#contactform').bootstrapValidator({
message: '',
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
contact_name: {
validators: {
notEmpty: {
message: ''
}
}
},
contact_email: {
validators: {
notEmpty: {
message: ''
},
emailAddress: {
message: ''
}
}
},
contact_message: {
validators: {
notEmpty: {
message: ''
}
}
}
},
submitHandler: function(validator, form, submitButton) {
$('.contact-form').addClass('ajax-loader');
var data = $('#contactform').serialize();
$.ajax({
type: "POST",
url: "/contacts",
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
data: $('#contactform').serialize(),
success: function(msg) {
$('.contact-form').removeClass('ajax-loader');
$('.form-message').html(msg);
$('.form-message').show();
submitButton.removeAttr("disabled");
resetForm($('#contactform'));
},
error: function(msg) {
$('.contact-form').removeClass('ajax-loader');
$('.form-message').html(msg);
$('.form-message').show();
submitButton.removeAttr("disabled");
resetForm($('#contactform'));
}
});
return false;
},
});
function resetForm($form) {
$form.find('input:text, input:password, input, input:file, select, textarea').val('');
$form.find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected');
}
});
contact.rb
class Contact
include ActiveModel::Model
include ActiveModel::Conversion
include ActiveModel::Validations
attr_accessor :contact_name, :contact_phone, :contact_email, :contact_message
validates :contact_name, :contact_email, :contact_message, presence: true
end
contacts_controller.rb:
class ContactsController < ApplicationController
def create
@contact = Contact.new(contact_params)
if @contact.valid?
ContactMailer.contact_email(@contact).deliver
redirect_to new_contact_path, notice: "Thank you for your message."
else
flash[:alert] = "An error occurred while delivering this message."
render :new
end
end
private
def contact_params
params.require(:contact).permit(:contact_name, :contact_phone, :contact_email, :contact_message)
end
end
contact_mailer.rb
class ContactMailer < ActionMailer::Base
default to: "me@myemailaddress.com"
def contact_email(contact)
@contact = contact
mail(from: email: @contact.contact_email, body: @contact.contact_message)
end
end
contact_email.text.slim
| New contact
= @contact.contact_name
= @contact.contact_email
| wrote:
= @contact.contact_message
我目前在@contact 对象的contact_mailer.rb 中遇到语法错误,但在此之前,Rails 服务器日志告诉我Contact 对象未初始化。我试过包括form_for/form_tag Rails 助手,但这似乎没有帮助。我还为HomeController 的联系人添加了索引操作,并在其他地方阅读了此建议。
我可以继续玩“更改错误消息”,但我想我遇到了一些根本性的错误(仍然是 Rails 新手),所以非常感谢任何指针。我已经阅读了 ActionMailer 文档以及我能找到的所有其他内容。
【问题讨论】:
-
问题与javascript没有直接关系。正在删除该标签
标签: ruby-on-rails ruby forms