2012-04-13 65 views
1

我正在使用mixin爲我的模型(Person)添加一些功能。在mixin中我需要做一些初始化,所以我試圖使用「after_initialize」回調宏來調用一個初始化方法。模型(Person)只是其他一些模型的基類。after_initialize從未在Rails 3中通過mixin調用

我遇到的問題是它永遠不會被調用。我試圖調試它,但斷點從未被擊中。同時日誌記錄也沒有輸出。

我找不到任何幫助(因爲這個構造應該在Rails 3中根據Api文檔和一些帖子在這裏工作)。

/lib/mymodule.rb

module MyModule 
    after_initialize :generate_ids 

    def generate_ids 
     logger.info "invoked" #never hit 
    end 
end 

/models/person.rb

require "mymodule" 

class Person < ActiveRecord::Base 
    include MyModule 
end 

/models/customer.rb

class Customer < Person 
    # nothing so far 
end 

* /控制器/ customers_controller.rb(動作=>新)*

# GET /customers/new 
# GET /customers/new.json 
def new 
    @person = Customer.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @customer } 
    end 
end 

請縱容我,因爲我是個 「新手」,以回報率。

非常感謝!

最好的問候, 托馬斯

UPDATE

重新啓動它給了我下面的異常的本地應用程序服務器後:

的ActionController :: RoutingError(未定義的方法`after_initialize」爲SequentialRecord:Module):

我認爲這個回調函數不能用在mixins中嗎?

回答

2

嘗試類似的東西(未測試)。

module MyModule 
    def self.included(base) 
    base.after_initialize :generate_ids 
    end 

    def generate_ids 
    logger.info "invoked" #never hit 
    end 
end 
+0

您好!非常感謝你,這就是它! ;-) – Thomas233 2012-04-13 17:53:48