我正在開發一個具有聯繫表單的應用程序。這是一個單頁的應用程序,我在後端使用rails,在前端使用angular(不適用於表單)和bootstrap。我正在嘗試使用ajax,因此我不必刷新頁面。當我剛剛用rails提交(使用Mailform)時,它看起來像在工作。用rails 4,郵件表單和ajax發送郵件?
當我進入console
並鍵入;
c = Contact.new(:name => "name", :email => "[email protected]", :message => "hi")
c.deliver
在控制檯中,我得到;
Rendered vendor/bundle/gems/mail_form-1.5.0/lib/mail_form/views/mail_form/contact.erb (2.9ms)
MailForm::Notifier#contact: processed outbound mail in 29.2ms
Sent mail to [EMAIL] (5.1ms)
Date: Fri, 25 Jul 2014 14:52:20 -0700
From: Name <[email protected]>
To: [EMAIL]
Message-ID: <[email protected]>
Subject: Onyx Contact Form
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<h4 style="text-decoration:underline">Onyx Contact Form</h4>
<p><b>Name:</b>
Name</p>
<p><b>Email:</b>
[email protected]</p>
<p><b>Message:</b>
Hi</p>
=> true
看起來像是在工作。但是,我不確定是否僅僅是因爲我沒有收到我的電子郵件(但也許電子郵件不會本地發送?)。當我嘗試使用ajax提交併按下「提交」時,沒有任何反應,所以我知道我的JavaScript不正確。
下面是我的代碼的其餘部分;
index.html.erb
<div class="row">
<%= bootstrap_form_for @contact ||= Contact.new do, remote: true |f| %>
<div class="inner">
<div class="col-md-7" id="form">
<%= f.text_field :name, :required => true, :hide_label => true, :placeholder => "Name" %>
<%= f.text_field :email, :required => true, :hide_label => true, :placeholder => "Email" %>
<%= f.text_area :message, size: "60x10", :required => true, :hide_label => true, :plceholder => "Hello, we'd love to work with you" %>
<%= f.submit 'Send Message', class: 'custom-button' %>
</div>
</div>
</div>
contact.rb
class Contact < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, :captcha => true
# Declare the e-mail headers. It accepts anything the mail method
# in ActionMailer accepts.
def headers
{
:subject => "Onyx Contact Form",
:to => "[MY_EMAIL]",
:from => %("#{name}" <#{email}>)
}
end
end
contacts_controller.rb
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
flash[:notice] = 'Thank you for your message. We will contact you soon!'
redirect_to root_url
else
flash.now[:error] = 'Cannot send message.'
render :new
end
end
end
個main.js
$(function(){
$("#form").submit(function(){
var dataSet = $(this).serialize();
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: dataSet,
complete: function(){
alert("Sent!");
},
error: function(){
alert("Something went wrong!");
}
});
return false;
});
})
的routes.rb
match '/contacts', to: 'contacts#new', via: 'post'
resources :contacts, as: 'home' #home so it doesn't go to another page
我還添加了在我從其他SO答案找到配置文件的一些東西,我不知道,如果是做任何事情或不。通常我不會使用ajax來提交表單,但是因爲它是單個頁面,所以路由到另一個頁面並不是真正的選擇。如果使用郵件表單太困難了,也許Action Mailer是一個更好的選擇?任何幫助指出我在正確的方向將不勝感激。
謝謝!我向development.rb添加了一些配置設置,並添加了您推薦的行。在我的終端中,當我輸入與上述問題相同的命令時,它向我發送了一封電子郵件。但是,在本地主機上,當我使用我的聯繫表單來查看它是否正常工作時,它並沒有給我發送電子郵件。所以它在控制檯上工作,但不是從窗體上。 – user3749994
我沒有在回答一些變化,請大家看看,做一個新的嘗試 – Aguardientico
咄!哈哈謝謝你。那是我的錯誤。 – user3749994