Rails 4:更新Destroy上的模型列

时间:2016-01-21 17:52:11

标签: ruby-on-rails model update-attribute

这适用于票务系统。

关闭故障单时,会有一列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 个答案:

答案 0 :(得分:1)

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

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

  1. 使用解决方案文本
  2. 将表单提交给控制器以获得已解决的故障单
  3. 创建一个后台电子邮件作业,其中包含通知相关方的决议详情
  4. 使用SMS详细信息创建另一个背景twilio作业以通知感兴趣的各方
  5. 销毁机票(你确定你再也不需要了吗?)
  6. 您应该阅读有关后台作业的Rails指南:http://guides.rubyonrails.org/active_job_basics.html

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