导轨4:销毁更新型号列

问题描述:

这是用于票务系统。导轨4:销毁更新型号列

当您关闭一张票时,会有一列resolution。用户键入分辨率,即“此票已由xyz解决”。该列是textfield类型的,不是字符串。所以你要关闭它并输入某种分辨率。但是,当该票证被删除时,该字段不会“更新”。

摘要:在故障单销毁时更新故障单模型上的分辨率列。推理:解决方案必须传递给电子邮件(通过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,但没有太多成功。用before_action使用时,此方法不起作用:

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

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

这是什么最好的方法呢?任何和所有的输入是赞赏。

只是在删除它之前更新一条记录,仅仅用于其他一些实际上不需要该记录的功能,听起来并不像是一种很好的工作方式。

这个工作流程,使我更有意义:

  1. 提交表单控制器解决票,决议文本
  2. 创建该决议的细节后台邮件工作通知有关方面
  3. 创建另一个背景twilio工作与SMS detaios通知感兴趣的各方
  4. 摧毁票(你确定你不会再需要它吗?)

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

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

+0

呀,你是100%正确的,并我决定不摧毁门票。已经设置了一个自定义的路由/控制器操作'关闭'来处理这个。为票证添加'completed_at'列,然后在ticket.rb中设置一个范围,以在索引页上显示票证:即,其中'completed_at:nil'。我欣赏你的反应,正如你指出我在正确的方向:) – DnfD

+0

我会坚持在你的控制器标准的'destroy'行动...只是不实际销毁记录。用它来关闭它们并处理关闭通知。 – Jon