0

这是一个票务系统。

当您关闭工单时,有一列resolution。用户输入解决方案,即“此票证由 xyz 解决”。该列是文本字段类型,而不是字符串。所以你去关闭它并输入某种分辨率。但是当票被删除时,该字段不会得到“更新”。

摘要:当票被销毁时,更新票模型上的解析列。推理:决议必须通过电子邮件(通过 Sendgrid)和 SMS(通过 Twilio)。目前,它将传递分辨率的默认值(无论创建票证时该值可能是什么)。

在初始票证创建表单中,我有resolution一个隐藏字段,如下所示:

<%= f.hidden_field :resolution, :value => "No Resolution Provided" %>

我试过的:

ticket.rb模型中:

before_destroy { self.update_attribute(:resolution, "a hardcoded value here") }

所以确保它有效,但这不是从表单中读取的,只是一个硬编码的值。如果我错了,请纠正我,但我试图做的事情应该在控制器中完成,对吗?

我已经尝试过,before_action但没有取得太大的成功。此方法在与 a 一起使用时不起作用before_action

def update_resolution
    @ticket = Ticket.find(params[:id])
    @ticket_res = @ticket.resolution
    @ticket_res.update_attribute(params[:resolution])
end

上面创建了一个重定向循环。

解决这个问题的最佳方法是什么?任何和所有输入表示赞赏。

4

1 回答 1

1

在删除它之前更新记录只是为了一些实际上不需要记录工作的其他功能对我来说听起来不是一个好的工作方式。

这个工作流程对我来说更有意义:

  1. 将表格提交给控制器以获取已解决的票证,并附上解决文本
  2. 创建包含决议详细信息的后台电子邮件作业,以通知相关方
  3. 使用 SMS 详细信息创建另一个后台 twilio 作业以通知相关方
  4. 销毁票(你确定你再也不需要它了吗?)

您应该阅读有关后台作业的 Rails 指南:http: //guides.rubyonrails.org/active_job_basics.html

虽然不是最快的后台作业系统,但延迟作业将是最容易上手的 - https://github.com/collectiveidea/delayed_job

于 2016-01-21T19:30:47.260 回答