跟踪属性变化时遇到问题 这是我的模特
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
但这不起作用(关于创造历史的规范失败了。我与这个斗争了好几个小时。非常感谢指出我的错误的任何回应
答案 0 :(得分:1)
很难说你的代码到底出了什么问题。
有一件事是ticket_params.merge(status: 0)
。由于您status
始终为0
且永远不会更改。
只要我看不到ticket_params
,我就无法确切地说明stuff_id
更改的确切错误。
我在我的测试项目中创建了相同的around_update
回调,它运行得很好。
我想注意的一点是,您应该使用paper_trail gem来处理模型历史记录。宝石很棒,你真的很喜欢它。