ActiveRecord在检索后始终运行一些代码

时间:2011-07-18 15:49:13

标签: ruby-on-rails activerecord

我总是试图在.find或.where之后运行一些代码或用于检索对象的任何代码。

例如,以下内容描述了我想要的内容,但不起作用

Class Person < ActiveRecord::BA
  @mortality=true
end

我想在创建Person对象时运行@ mortality = true 根据我目前对ORM / ActiveRecord的理解,每当检索完成时都会创建一个新对象。希望这是正确的。

2 个答案:

答案 0 :(得分:2)

您想在after_initialize方法中执行此操作:

class Person < ActiveRecord::Base
  def after_initialize
    @mortality = true
  end
end

请注意,如果可能的话,您应该避免这样做,因为它会发生在每个对象上,即使您检索到大量结果集也是如此。

在这个(虽然很简单)的情况下,你可以通过覆盖getter懒惰地完成任务:

class Person < ActiveRecord::Base
  def mortality
    @mortality.nil? ? true : @mortality
  end
end

(你不能在这里使用nil gate ||=,因为它也会过滤false个值

答案 1 :(得分:0)

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

查找after_find和after_initialize回调。