2016-09-24 212 views
0

我有在这里的属性 跟踪变化的问题是我的模型跟踪更改

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

you user'ticket_params.merge(status:0)'所以你的'status'总是'0'。它不会改变 – Aleksey

+2

也我会推荐使用[paper_trail](https://github.com/airblade/paper_trail)宝石。它具有非常好的功能来版本化你的模型。 – Aleksey

+1

和'stuff_id'值呢?莫名其妙地改变了吗? – Aleksey

回答

1

很难说出什么是错误的与您的代码。

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

只要我看不到ticket_params我不能说stuff_id确切地说有什么问题。

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

我主要注意到你应该使用paper_trail宝石来处理你的模型历史。宝石真棒,你会真的很喜欢它。

+0

是的,宝石是超级性感谢谢的人! –