自动创建关联对象?

时间:2015-04-02 18:12:28

标签: ruby-on-rails activerecord rails-activerecord

我有一个Track模型,其中包含一个名为rank的整数属性。 我正在通过具体行动更新排名:收听,下载,购买等。例如:下载曲目时,在track_controller中我使用track.increment!(:rank, by = 60)

我正在考虑创建一个关联模型TrackRank,这样我就可以在任何时候更新一个轨道的等级时都有一个时间戳(所以我可以对一个轨道的等级进行3周的滚动查询以进行过滤和显示)。

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

最终目标: 能够根据过去3周内的排名数查询前X个曲目数量。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以在控制器上更新它

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