我有一个需要大量依赖的模型......它看起来像这样:
after_create :create_dependencies
def create_dependencies
create_foo
create_bar
create_baz
# ...
end
这实际上污染了我的模型类,带有一堆废话。还有另一种方法可以解决这个问题吗?我希望使用表单对象或类似的东西,但我想确保所有这些对象都有它们的依赖关系,无论是什么,即使通过命令行,在测试套件中创建等。
答案 0 :(得分:0)
我的第一反应是创建一个像你提到的Form对象(as described by Ryan Bates)。但是,如果您直接保存模型,则不会创建任何依赖项。
您可以采取的一种方法是将依赖项创建重构为一个单独的类:
# lib/my_model_dependency_creator.rb
class MyModelDependencyCreator
def initialize(my_model)
@my_model = my_model
end
def create_dependencies
create_foo
create_bar
# etc
end
private
def create_foo
# create dependency associated with @my_model
end
def create_bar
end
end
然后在你的模型类中:
...
after_create :create_dependencies
def create_dependencies
MyModelDependencyCreator.new(self).create_dependencies
end
答案 1 :(得分:0)
首先,有关观察者的想法吗?
其次,我想提取代码并不难。
#include this module in your model
module AutoSaveDependency
def auto_save_dependencies *deps
@@auto_save_dependencies = deps
end
def auto_save
@@auto_save_dependencies.each {|dep| send "create_#{dep}" }
end
def self.included(model)
model.send :after_create, :auto_save
end
end
因此,在您的模型中,您只需包含此模块,然后编写auto_save_dependencies :foo, :bar, ...
可能会更复杂,但我认为这是可行的