2016-09-24 266 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

是的,寶石是超級性感謝謝的人! –