触摸CRUD上的所有关联模型

时间:2012-04-22 05:16:55

标签: ruby-on-rails ruby-on-rails-3

我有一个2级嵌套模型:

country <- state <- city

目前,在每个控制器中,在所有CRUD操作中,我将找到其父模型并为每个模型运行.touch。例如:

# cities_controller.rb
def update
  @state = State.find(params[:state_id])
  @country = Country.find(@state.id)
  ...
  @state.touch
  @country.touch
end

对于statecity中的每个操作,只要CRUD成功完成,我就会触及其父级(及其父级的父级)。

有没有DRYer方法可以做到这一点?我知道autosave选项,但它只适用于新创建的关联记录。我想要包括销毁,更新的记录。如果更改了一个city,则statecountry也会加上时间戳,以反映某些内容已发生变化。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果我是你,我更喜欢在这个模型中重写touch函数。

class State < ActiveRecord:Base
  def touch
    self.updated_at = Time.now
    self.state.touch
  end
end

class City < ActiveRecord:Base
  def touch
    self.updated_at = Time.now
    self.state.touch
  end
end