2015-11-23 74 views
1

我正在使用Rails gem,Public Activity並希望爲每個update動作創建一個活動實例,但有一個問題。我只想要創建的事件,如果某個屬性被改變。在我的情況下,這將是一個職位的time_zone。下面是如何活動,目前在我的職位控制器創建:公共活動 - 基於某些屬性更改創建活動

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