我有一个需要大量依赖项的模型......它看起来像这样:
after_create :create_dependencies
def create_dependencies
create_foo
create_bar
create_baz
# ...
end
这真是用一堆废话污染了我的模型课。我还有其他方法可以解决这个问题吗?我很想使用表单对象或类似的东西,但我想确保所有这些对象无论如何都带有它们的依赖关系,即使是通过命令行、在测试套件等中创建的。
我有一个需要大量依赖项的模型......它看起来像这样:
after_create :create_dependencies
def create_dependencies
create_foo
create_bar
create_baz
# ...
end
这真是用一堆废话污染了我的模型课。我还有其他方法可以解决这个问题吗?我很想使用表单对象或类似的东西,但我想确保所有这些对象无论如何都带有它们的依赖关系,即使是通过命令行、在测试套件等中创建的。
首先,对观察者有什么想法吗?
其次,我想提取代码并不难。
#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, ...
它可能更复杂,但我认为这是可行的
我的第一反应是像您提到的那样创建一个 Form 对象(如 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