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,


它可能更复杂,但我认为它是可行的

为什么不呢?这基本上就是观察者所做的