0

我有一个需要大量依赖项的模型......它看起来像这样:

after_create :create_dependencies

def create_dependencies
  create_foo
  create_bar
  create_baz
  # ...
end

这真是用一堆废话污染了我的模型课。我还有其他方法可以解决这个问题吗?我很想使用表单对象或类似的东西,但我想确保所有这些对象无论如何都带有它们的依赖关系,即使是通过命令行、在测试套件等中创建的。

4

2 回答 2

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, ...

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

于 2013-07-17T06:23:23.003 回答
0

我的第一反应是像您提到的那样创建一个 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
于 2013-07-17T03:53:02.547 回答