2016-01-21 73 views
0

這是用於票務系統。導軌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

只是在刪除它之前更新一條記錄,僅僅用於其他一些實際上不需要該記錄的功能,聽起來並不像是一種很好的工作方式。

這個工作流程,使我更有意義:

  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