gpt4 book ai didi

ruby-on-rails - Ruby/ActionMailer/保存邮件

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:45 24 4
gpt4 key购买 nike

我正在创建一个客户支持应用,客户可以在其中创建、查看、编辑和评论支持票。

我的应用程序的这一部分工作正常,但我想将他们提交到票证表格中的数据通过电子邮件发送给我。

我有一个单独的“联系我们”表单,可以完美地将数据通过电子邮件发送给我,但我想将这两个表单合二为一。

它应该像这样工作:客户端创建票证,票证保存到数据库中,票证副本通过电子邮件发送给我。

我不知道如何通过一种形式实现所有这些操作。

这是我的票务 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com