Ruby on rails Ruby/ActionMailer/保存邮件
我正在创建一个客户支持应用程序,客户可以在其中创建、查看、编辑和评论支持票证 我的应用程序的这一部分工作正常,但我想让他们将提交到票证表格中的数据通过电子邮件发送给我 我有一个单独的“联系我们”表单,可以完美地通过电子邮件将数据发送给我,但我想将这两个表单合并为一个表单 它应该是这样工作的:客户端创建票证,票证保存到数据库中,票证的副本通过电子邮件发送给我 我不知道如何从一种形式上实现所有这些操作 这是我的售票员:Ruby on rails Ruby/ActionMailer/保存邮件,ruby-on-rails,ruby,actionmailer,Ruby On Rails,Ruby,Actionmailer,我正在创建一个客户支持应用程序,客户可以在其中创建、查看、编辑和评论支持票证 我的应用程序的这一部分工作正常,但我想让他们将提交到票证表格中的数据通过电子邮件发送给我 我有一个单独的“联系我们”表单,可以完美地通过电子邮件将数据发送给我,但我想将这两个表单合并为一个表单 它应该是这样工作的:客户端创建票证,票证保存到数据库中,票证的副本通过电子邮件发送给我 我不知道如何从一种形式上实现所有这些操作 这是我的售票员: class TicketsController < Application
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
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
class ticketcontroller
这是我的新机票视图:
<%= 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>
'btn btn危险btn sm'>
新票
38,:行=>8%>
提交票证
“btn btn危险btn sm”,:方法=>:获取%>
这是我的电子邮件控制器:
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
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
class ContactController“消息已成功发送”。)
其他的
flash.now.alert=“请填写所有字段。”
渲染:新
结束
结束
结束
以下是我的电子邮件视图:
<%= 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 %>
contactcreate|u path do|form|%>
门票型号:
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
classticket
通知邮递员:
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
class NotificationsMailer“帮助台:{message.subject}”)
默认值:from=>”HelpDeskApp@ascendstudioslive.com"
默认值:to=>”Support@ascendstudioslive.com"
结束
如果您还有什么想看的,请告诉我。基本上,我希望有一个表单,将一张票证保存到数据库,然后通过电子邮件发送一份副本
谢谢大家! 您可以在您的票证模型中创建一个“创建后”回调,将保存的票证通过电子邮件发送给您自己
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
classticket
在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
class UserMailer
然后,您就可以在邮件视图中使用@ticket对象,无论您喜欢什么方式。您尝试过这个吗?我不知道它是否会起作用,但都一样:
@new_message = NotificationsMailer.new_message(@message)
save_to_db(@new_message) # custom method to write it into your db somehow
@new_message.deliver
不太确定联系人和票证是什么,但大体上来说,做你想做的事情的方式是,在你的创建操作中:
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...
end
您的create方法不创建有什么原因吗?i、 e.你为什么不保存你的联系人#创建方法?你可以随时对自己的帖子发表评论。我以为我还在登录,但我没有。我现在可以评论:)为什么回叫而不是从控制器发送回叫?如果他想在其他操作中通过电子邮件发送票据,同样的块可以重复使用。这里应用了胖模型瘦控制器。我尝试了一下,现在得到了:语法错误,意外的关键字\u end,我的tickets控制器的输入应该结束。“我已经看完了整件事,我似乎找不到问题所在。@Mavis为为什么在这种情况下使用回调提供了一个很好的理由,他的答案比我的更好。至于语法错误,这只是意味着你有一个额外的“结束”,这只是一个打字错误,而不是你的核心问题。我解决了其他问题,它的工作!谢谢Mavis和所有帮助过我的人!我只制作了两个单独的表单,因为我不知道如何正确操作。理想情况下,我会摆脱联系,只将票证保存到数据库并通过电子邮件发送给我。