首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby / ActionMailer / Saving

Ruby / ActionMailer / Saving
EN

Stack Overflow用户
提问于 2014-07-09 20:59:10
回答 3查看 111关注 0票数 2

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

我的这部分应用程序运行良好,但我想让他们提交的数据通过电子邮件给我的票表。

我有一个单独的“联系我们”形式,电子邮件数据给我完美,但我想把这两个表格合并为一个。

它应该是这样工作的:客户端创建票证,将票证保存到数据库中,将票证的副本发送给我。

我不知道如何使所有这些动作从一种形式发生。

这是我的售票员:

代码语言:javascript
复制
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

这是我的新票视图:

代码语言:javascript
复制
<%= 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>

这是我的电子邮件控制器:

代码语言:javascript
复制
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

这是我的电子邮件视图:

代码语言:javascript
复制
<%= 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 %>

票务模式:

代码语言:javascript
复制
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

通知发送者:

代码语言:javascript
复制
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

如果你还想看什么,请告诉我。基本上,我想有一种形式,保存一张票到数据库,然后通过电子邮件的副本出来。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-09 21:17:30

您可以在您的票证模型中创建一个after_create回调,以便将保存的票证发送给自己。

代码语言:javascript
复制
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类中:

代码语言:javascript
复制
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

然后,您将能够在您的邮件查看中使用@票证对象,无论您喜欢何种方式。

票数 1
EN

Stack Overflow用户

发布于 2014-07-09 21:18:12

你试过这个吗?我不知道它是否会起作用,但不管怎样:

代码语言:javascript
复制
@new_message = NotificationsMailer.new_message(@message)
save_to_db(@new_message) # custom method to write it into your db somehow
@new_message.deliver
票数 0
EN

Stack Overflow用户

发布于 2014-07-09 22:07:12

不太确定联系人和罚单是什么,但总的来说,在创建操作中,做您想做的事情的方法是:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24663706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档