2013-07-17 24 views
0

我有需要噸依賴的模型......它看起來是這樣的:建立在Rails中的依賴關係 - 有沒有比after_create更好的模式?

after_create :create_dependencies 

def create_dependencies 
    create_foo 
    create_bar 
    create_baz 
    # ... 
end 

這真是我的污染模型類有一堆廢話的。我還有另外一種方法可以解決這個問題嗎?我很樂意使用表單對象或類似的東西,但是我想確保所有這些對象都依賴於它們的依賴關係,即使通過命令行,測試套件等創建。

回答

0

My第一個反應就是像你提到的那樣創建一個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 
+0

爲什麼不觀察員?這基本上是一個觀察者所做的 –

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

這可能是更加複雜,但我認爲這是可行的