自动创建关联对象?
问题描述:
我有一个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
答
您可以在控制器上更新
class TracksController < ApplicationController
def update
@track.update!
TrackRank.create(@track)
end
end
一个说明 - 你应该重构代码,以避免'增量“,”update_columns“和其他跳过回调的方法。 – dimuch 2015-04-02 18:33:32
我该怎么做?如果你写回电话并使用避免回调的方法,我不认为我可以提供帮助。 – 2015-04-02 18:34:56
我的评论发给Ryan Rebo,我看他使用了'track.increment!(:rank,by = 60)',回调在这种情况下不起作用。 – dimuch 2015-04-02 18:37:35