我正在尝试将我在纯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)
但是这种风格不允许我在创建新对象时自动调用方法。
答案 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_find
和after_initialize
回调 由查找程序找到并实例化的每个对象 在将新对象实例化为之后触发after_initialize
好。
答案 2 :(得分:1)
听起来像是用ActiveRecord Callbacks
(http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html)。