2015-04-02 105 views
0

我有一個Track模型,它帶有一個整數屬性rank。 我正在通過特定操作更新排名:收聽,下載,購買等。例如:當一個曲目下載,在track_controller我用track.increment!(:rank, by = 60)自動創建關聯對象?

我想創建一個關聯模型TrackRank的,所以我可以有一個時間戳隨時軌道的排名被更新(所以我可以做一個滾動3個星期查詢用於過濾和顯示目的的曲目排名)。

每次更新曲目排名屬性時,是否有自動創建關聯TrackRank對象的方法?

的終極目標: 能夠查詢基於列數在過去的3周軌道頂的X量。

回答

2

您可以在賽道上的更新添加一個有條件的回調

class Track < ActiveRecord::Base 
    # ignored associations and stuff 
    after_update :create_track_rank, if: :rank_changed? 

    # ignored methods 

    private 
    def create_track_rank 
    track_ranks.create(data) 
    end 
end 
+0

一個說明 - 你應該重構代碼,以避免'增量「,」update_columns「和其他跳過回調的方法。 – dimuch 2015-04-02 18:33:32

+0

我該怎麼做?如果你寫回電話並使用避免回調的方法,我不認爲我可以提供幫助。 – 2015-04-02 18:34:56

+0

我的評論發給Ryan Rebo,我看他使用了'track.increment!(:rank,by = 60)',回調在這種情況下不起作用。 – dimuch 2015-04-02 18:37:35

0

您可以在控制器上更新

class TracksController < ApplicationController 
    def update 
    @track.update! 
    TrackRank.create(@track) 
    end 
end