2012-04-13 58 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