我正在创建一个客户支持应用程序,客户可以创建,查看,编辑和评论支持票。
我的这部分应用程序运行良好,但我想让他们提交的数据通过电子邮件给我的票表。
我有一个单独的“联系我们”形式,电子邮件数据给我完美,但我想把这两个表格合并为一个。
它应该是这样工作的:客户端创建票证,将票证保存到数据库中,将票证的副本发送给我。
我不知道如何使所有这些动作从一种形式发生。
这是我的售票员:
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这是我的新票视图:
<%= 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>这是我的电子邮件控制器:
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这是我的电子邮件视图:
<%= 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如果你还想看什么,请告诉我。基本上,我想有一种形式,保存一张票到数据库,然后通过电子邮件的副本出来。
谢谢!
发布于 2014-07-09 21:17:30
您可以在您的票证模型中创建一个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然后,您将能够在您的邮件查看中使用@票证对象,无论您喜欢何种方式。
发布于 2014-07-09 21:18:12
你试过这个吗?我不知道它是否会起作用,但不管怎样:
@new_message = NotificationsMailer.new_message(@message)
save_to_db(@new_message) # custom method to write it into your db somehow
@new_message.deliver发布于 2014-07-09 22:07:12
不太确定联系人和罚单是什么,但总的来说,在创建操作中,做您想做的事情的方法是:
def create
@message = Message.create(params[:message])) # create will save and validate the message
if @message.valid?
NotificationsMailer.new_message(@message).deliver # @message gets set to
# else...
endhttps://stackoverflow.com/questions/24663706
复制相似问题