Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby/ActionMailer/保存邮件_Ruby On Rails_Ruby_Actionmailer - Fatal编程技术网

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和所有帮助过我的人!我只制作了两个单独的表单,因为我不知道如何正确操作。理想情况下,我会摆脱联系,只将票证保存到数据库并通过电子邮件发送给我。