如何在创建新的ActiveRecord对象时调用方法

时间:2015-08-13 14:25:57

标签: ruby-on-rails ruby activerecord

我正在尝试将我在纯Ruby中编写的算法集成到Rails应用程序中。我的Ruby项目的主要类可以是资源。

当它在Ruby中初始化时,我立即在initialize方法中调用了一个函数:

def initialize(keyword)
  @keyword = keyword                    
  @sources = get_titles_of_sources                  
end

在Rails中,当我创建新对象时,我通常没有或至少看到initialize方法。

@user = User.new(attribute1: value1, attribute2: value2)

但是这种风格不允许我在创建新对象时自动调用方法。

3 个答案:

答案 0 :(得分:4)

鉴于你在评论中所说的话,我觉得你应该避免回调(顺便说一句,如果可以的话,你应该总是避免回调......)。

无论如何,我建议你创建一个build方法,如:

 class User 
   def self.build(props = {})
     new(props).tap do |user|
       #your code on initialize
     end
   end
 end

我通常倾向于将build方法移动到构建器中。但它会让您创建一个额外的class

答案 1 :(得分:2)

使用after_initialize回调。

  

最后会触发after_findafter_initialize回调   由查找程序找到并实例化的每个对象   在将新对象实例化为之后触发after_initialize   好。

Active Record Callbacks

答案 2 :(得分:1)

听起来像是用ActiveRecord Callbackshttp://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html)。