我确实有跟踪属性变化的问题这是我的模型
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
action update is trivial
def update
flash[:notice] = "Your ticket successfully updated."
@ticket.update!(ticket_params.merge(status: 0))
end
但是这不起作用(创建历史的规范失败)。我为此奋斗了好几个小时。如果有人指出我的错误,我将非常感激
很难说你的代码到底出了什么问题。
一个是ticket_params.merge(status: 0)
。因为你的status
总是0
,从来没有改变过。
只要我看不到ticket_params
,我就不能确切地说stuff_id
的变化有什么问题。
我在测试项目中创建了相同的around_update
回调,它工作得很好。
我想要注意的主要事情是你应该使用paper_trail gem来处理你的模型历史。这颗宝石太棒了,你一定会喜欢的。