自动创建关联对象?

问题描述:

我有一个Track模型,它带有一个整数属性rank。 我正在通过特定操作更新排名:收听,下载,购买等。例如:当一个曲目下载,在track_controller我用track.increment!(:rank, by = 60)自动创建关联对象?

我想创建一个关联模型TrackRank的,所以我可以有一个时间戳随时轨道的排名被更新(所以我可以做一个滚动3个星期查询用于过滤和显示目的的曲目排名)。

每次更新曲目排名属性时,是否有自动创建关联TrackRank对象的方法?

的终极目标: 能够查询基于列数在过去的3周轨道顶的X量。

您可以在赛道上的更新添加一个有条件的回调

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

您可以在控制器上更新

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