2015-11-23 2 views
1

Я использую Rails gem, Public Activity и хотел создать экземпляр действия для каждого действия update, но с уловкой. Я хочу, чтобы событие было создано только в случае изменения определенного атрибута. В моем случае это будет time_zone. Вот как деятельность в настоящее время создается в моем контроллере сообщений:Public Activity - Создание действий на основе определенных изменений атрибутов

class PostsController < ApplicationController 
    def update 
    ... 
    @post.create_activity :update, owner: current_user 
    ... 
    end 
end 

Я не мог найти что-либо в документации, которые объясняют, как сделать выше. Есть ли способ настроить, допустим, условие, которое проверяет, изменилось ли значение time_zone, чтобы это произошло?

ответ

0

ActiveModel::Dirty обрабатывает отслеживание изменений атрибутов в вашей модели. Есть несколько способов, чтобы сказать, сделал ли или нет конкретного атрибут изменения:

  • changed_attributes возвращающей Hash изменения модели перед сохранением (то есть она {} после сохранения, потому что у вас есть четкое, без изменения состояния для текущий объект). Это не будет работать в вашем контроллере.
  • previous_changes возвращает Hash атрибутов, которые были изменены при сохранении. Это то, что вы хотите для своего контроллера.

Итак, вам нужно следующее в контроллере

def update 
    @post = Post.find(params[:id]) 
    @post.update!(post_params) 

    if @post.previous_changes.key?('time_zone') 
    @post.create_activity(:update, owner: current_user) 
    end 
end 
+0

ли вы, возможно, поделиться некоторые детали, пожалуйста – JGallardo

+0

точно ... обновлено ^ – bschaeffer

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