2011-09-16 12 views
49

Czy można zdefiniować wywołanie zwrotne before_save w module? Takie, że z klasy jak ten:Czy można zdefiniować wywołanie zwrotne "before_save" w module?

class Model 
    include MongoMapper::Document 
    include MyModule 
end 

oraz moduł jak ten:

module MyModule 
    before_save :do_something 

    def do_something 
    #do whatever 
    end 
end 

do_something zostanie wezwany przed zapisywane są wszelkie Model obiekty? Próbowałem tego tak, ale dostaję undefined method 'before_save' for MyModule:Module.

Przepraszam, jeśli to coś prostego - jestem nowy w Ruby i Rails.

Odpowiedz

95

W Ruby szynach < 3 (bez poręczy cechy tylko Ruby)

module MyModule 
    def self.included(base) 
    base.class_eval do 
     before_save :do_something 
    end 
    end 

    def do_something 
    #do whatever 
    end 
end 

W Ruby szynach> = 3 (z szyn Concern elementów)

module MyModule 
    extend ActiveSupport::Concern 

    included do 
    before_save :do_something 
    end 

    def do_something 
    #do whatever 
    end 
end 
+1

Działa idealnie - dzięki! – Russell

+0

Czy podejście dla Railsów <3 nie zadziała w Railsach> = 3? Robię to i moje wywołania zwrotne 'before_validation' nie wydają się być wywoływane. – Bradley

+0

To też zadziała. –

Powiązane problemy