Ruby on rails Rails回调的等效值为;在“新”之后;

Ruby on rails Rails回调的等效值为;在“新”之后;,ruby-on-rails,activerecord,callback,Ruby On Rails,Activerecord,Callback,现在我找不到在第1行和第2行之间生成回调的方法: f = Foo.new f.some_call f.save! 有没有办法有效地模拟新回调后的回调?现在我正在使用after_initialize,但是使用它可能会出现性能问题,因为它会触发许多不同的事件。为Foo定义一个构造函数,并在那里执行需要执行的操作 另一种解决方案是在初始化后使用,但这可能并不能完全满足您的期望。如果这是一个活动记录模型,那么在创建对象后,初始化后是处理回调的正确方法。框架本身对从数据库创建对象的方式做出了某些假设。性

现在我找不到在第1行和第2行之间生成回调的方法:

f = Foo.new
f.some_call
f.save!

有没有办法有效地模拟新回调后的回调?现在我正在使用after_initialize,但是使用它可能会出现性能问题,因为它会触发许多不同的事件。

Foo
定义一个构造函数,并在那里执行需要执行的操作


另一种解决方案是在初始化后使用
,但这可能并不能完全满足您的期望。

如果这是一个活动记录模型,那么在创建对象后,初始化后是处理回调的正确方法。框架本身对从数据库创建对象的方式做出了某些假设。性能不应该是一个问题,除非回调中触发了一些长时间运行的任务,在这种情况下,您可能需要重新考虑策略

如果不是AR模型,您可以在对象中创建一个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?"

嗨,是的,这是活动记录,在呈现“新”视图之前,我正在设置一些必需的关联。
# 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