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

Fli*_*lip 2 ruby activerecord ruby-on-rails

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

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

def initialize(keyword)
  @keyword = keyword                    
  @sources = get_titles_of_sources                  
end
Run Code Online (Sandbox Code Playgroud)

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

@user = User.new(attribute1: value1, attribute2: value2)
Run Code Online (Sandbox Code Playgroud)

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

apn*_*ing 5

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

无论如何,我建议您创建一个build类似的方法:

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

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

  • 因为使用不同的名称可以让您拥有自己的方法,而无需覆盖现有的方法。这样你就不会让任何人感到惊讶,并且你的代码仍然可以揭示意图 (2认同)