Ruby on rails 在Rails中建立依赖关系-是否有比创建后更好的模式?
我有一个需要大量依赖项的模型。。。它看起来像这样:Ruby on rails 在Rails中建立依赖关系-是否有比创建后更好的模式?,ruby-on-rails,model,Ruby On Rails,Model,我有一个需要大量依赖项的模型。。。它看起来像这样: 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
这真的是用一堆废话污染了我的模型课。我还有别的办法吗?我很想使用表单对象或类似的东西,但我想确保所有这些对象都有它们的依赖关系,不管发生什么,即使是通过命令行、测试套件等创建的对象。我的第一反应是创建一个表单对象,就像您提到的()。但是,如果直接保存模型,则不会创建任何依赖项,这是正确的 您可以采取的一种方法是将依赖项创建重构为一个单独的类:
# 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
首先,有关于观察员的想法吗 其次,我想提取代码并不难
#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\u save\u依赖项:foo,:bar,
它可能更复杂,但我认为它是可行的为什么不呢?这基本上就是观察者所做的