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

标签 ruby-on-rails ruby actionmailer

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

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

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

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

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

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

相关文章:

ruby - Chef shell 脚本未运行

ruby-on-rails - Windows 上的 Ruby On Rails - Linux VM 或双引导

ruby-on-rails - 复制 curl 命令以访问 Rails 中的 Smartsheet

ruby-on-rails - 为什么只有某些调用会使用 devise_token_auth 使 token 失效/替换

ruby-on-rails - 如何在 Ruby on Rails 中为模型添加虚拟属性?

ruby-on-rails - 在 Rails 中同时使用 simple_format 和 html_safe

ruby-on-rails - 带有非 ActiveRecord 模型的 Rails ContactForm - 验证

ruby-on-rails - Sidekiq 延迟邮件程序找不到模块

ruby-on-rails - Ruby on Rails : Operation now in progress - connect(2) would block

ruby-on-rails-3 - Rails - 使用布局对所有电子邮件使用相同的附件