我正在创建一个客户支持应用,客户可以在其中创建、查看、编辑和评论支持票。
我的应用程序的这一部分工作正常,但我想将他们提交到票证表格中的数据通过电子邮件发送给我。
我有一个单独的“联系我们”表单,可以完美地将数据通过电子邮件发送给我,但我想将这两个表单合二为一。
它应该像这样工作:客户端创建票证,票证保存到数据库中,票证副本通过电子邮件发送给我。
我不知道如何通过一种形式实现所有这些操作。
这是我的票务 Controller :
class TicketsController < ApplicationController
def new
@ticket = Ticket.new
end
def create
@ticket = Ticket.new(ticket_params)
@ticket.save
redirect_to @ticket
end
def show
@ticket = Ticket.find(params[:id])
end
def index
@tickets = Ticket.all
end
def edit
@ticket = Ticket.find(params[:id])
end
def update
@ticket = Ticket.find(params[:id])
if @ticket.update(ticket_params)
redirect_to @ticket
else
render 'edit'
end
end
def destroy
@ticket = Ticket.find(params[:id])
@ticket.destroy
redirect_to tickets_path
end
private
def ticket_params
params.require(:ticket).permit(:name, :email, :phone, :help)
end
end
这是我的新工单 View :
<%= link_to "View an Existing Ticket", tickets_path, :class =>'btn btn-danger btn-sm'%>
<h1>New Ticket</h1>
<%= form_for :ticket, url: tickets_path do |f| %>
<p>
<%= f.label "Name:" %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label "Email:" %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :"Phone #:" %>
<%= f.text_field :phone %>
</p>
<p>
<%= f.label :"How can we help?" %>
<p><%= f.text_area :help, :cols=> 38, :rows => 8 %></p>
</p>
<p>
<button type="submit" class="btn btn-danger btn-sm">Submit Ticket</button>
</p>
<% end %>
<p><%= button_to "Back", root_path, :class => "btn btn-danger btn-sm", :method => :get %></p>
这是我的电子邮件 Controller :
class ContactController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.new_message(@message).deliver
redirect_to(root_path, :notice => "Message was successfully sent.")
else
flash.now.alert = "Please fill all fields."
render :new
end
end
end
这是我的电子邮件 View :
<%= form_for @message, :url => contactcreate_path do |form| %>
<fieldset class="fields">
<div class="field">
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<div class="field">
<%= form.label :email %>
<%= form.text_field :email %>
</div>
<div class="field">
<%= form.label :subject %>
<%= form.text_field :subject %>
</div>
<div class="field">
<%= form.label :body %>
<%= form.text_area :body %>
</div>
</fieldset>
<fieldset class="actions">
<%= form.submit "Send" %>
</fieldset>
<% end %>
门票型号:
class Ticket < ActiveRecord::Base
after_create :send_new_ticket_to_email
private
def send_new_ticket_to_email
NotificationsMailer.send_new_ticket(self).deliver
end
end
通知邮件:
class NotificationsMailer < ActionMailer::Base
def send_new_ticket(ticket)
@ticket = ticket
mail(:subject => "HelpDesk: #{message.subject}")
default :from => "HelpDeskApp@ascendstudioslive.com"
default :to => "Support@ascendstudioslive.com"
end
如果您还有其他想看的内容,请告诉我。基本上,我想要一个表单,将票证保存到数据库,然后通过电子邮件发送一份副本。
谢谢!
最佳答案
您可以在您的 Ticket 模型中创建一个 after_create 回调,以通过电子邮件将保存的票证发送给您自己。
class Ticket < ActiveRecord::Base
after_create :send_new_ticket_to_email
private
def send_new_ticket_to_email
UserMailer.send_new_ticket(self).deliver
end
end
在你的 ActionMailer 类中:
class UserMailer < ActionMailer::Base
def send_new_ticket(ticket)
@ticket = ticket
/* here you configure the variables for your email */
mail(to: your@email.com, subject: 'New ticket...')
end
end
然后您将能够以任何您喜欢的方式在邮件 View 中使用@ticket 对象。
关于ruby-on-rails - Ruby/ActionMailer/保存邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663706/