跟踪属性的变化

时间:2016-09-24 20:01:00

标签: ruby-on-rails ruby

跟踪属性变化时遇到问题 这是我的模特

class Ticket < ActiveRecord::Base
  include Generator  
  around_update :create_history
  def create_history    
    @event_status = "Status to #{self.status}.\n" if status_changed?    
    @event_owner = "Now it is provided by #{self.stuff.name}\n" if   stuff_id_changed?
    yield    
    histories.create(event: "Changed! #{@event_status} #{@event_owner} On #{self.updated_at.utc}") if @event_status || @event_owner
  end
end

行动更新很简单

def update
   flash[:notice] = "Your ticket successfully updated."    
   @ticket.update!(ticket_params.merge(status: 0))    
end

但这不起作用(关于创造历史的规范失败了。我与这个斗争了好几个小时。非常感谢指出我的错误的任何回应

1 个答案:

答案 0 :(得分:1)

很难说你的代码到底出了什么问题。

有一件事是ticket_params.merge(status: 0)。由于您status始终为0且永远不会更改。

只要我看不到ticket_params,我就无法确切地说明stuff_id更改的确切错误。

我在我的测试项目中创建了相同的around_update回调,它运行得很好。

我想注意的一点是,您应该使用paper_trail gem来处理模型历史记录。宝石很棒,你真的很喜欢它。