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

вы пользователь 'ticket_params.merge (статус: 0)' поэтому ваш 'статус' всегда' 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 callback в своем тестовом проекте, и он работает отлично.

Главное, что я хотел бы отметить, что вы должны использовать драгоценный камень paper_trail для рассмотрения истории ваших моделей. Драгоценный камень потрясающий, и вы действительно полюбите его.

+0

Да, драгоценный камень супер сексуальный благодаря мужчине! –

Смежные вопросы