Rails回调相当于"after_new"

Joe*_*rns 16 activerecord ruby-on-rails callback

现在我无法在这里找到一种在第1行和第2行之间生成回调的方法:

f = Foo.new
f.some_call
f.save!
Run Code Online (Sandbox Code Playgroud)

有没有办法模拟什么是有效的after_new回调?现在我正在使用after_initialize但是使用它有潜在的性能问题,因为它会触发很多不同的事件.

hdo*_*rio 42

您可以使用after_initialize回调

# app/models/foo.rb
class Foo < ActiveRecord::Base
  after_initialize :some_call

  def some_call
    puts "Who you gonna call?"
  end
end

# rails console
> foo = Foo.new # => "Who you gonna call?"
> foo = Foo.first # => "Who you gonna call?"
Run Code Online (Sandbox Code Playgroud)

当心after_initialize每次触发的ActiveRecord做Foo.new(调用像new,find,first等等)看到的Rails指南

所以你可能想要这样的东西 after_initialize :some_call, :if => :new_record?

# app/models/foo.rb
class Foo < ActiveRecord::Base
  after_initialize :some_call, :if => :new_record?

  def some_call
    puts "Who you gonna call?"
  end
end

# rails console
> foo = Foo.new # => "Who you gonna call?"
> foo = Foo.first
Run Code Online (Sandbox Code Playgroud)