after_initialize从未在Rails 3中通过mixin调用

时间:2012-04-13 16:29:08

标签: ruby-on-rails ruby activerecord mixins

我正在使用mixin为我的模型(Person)添加一些功能。在mixin中我需要进行一些初始化,所以我试图使用“after_initialize”回调宏来调用初始化方法。模型(Person)只是其他一些模型的基类。

我遇到的问题是它永远不会被调用。我试图调试它,但断点从来没有被击中。记录也没有输出。

我找不到任何帮助(因为根据Api文档和这里的一些帖子,这个结构应该在Rails 3中工作)。

/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

* / controllers / customers_controller.rb(action =&gt; new)*

# 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

请放纵我,因为我是RoR的“新手”。

非常感谢!

祝你好运, 托马斯

更新

重新启动本地应用服务器后,它给出了以下异常:

  

ActionController :: RoutingError(SequentialRecord:模块的未定义方法`after_initialize'):

我认为这个回调不能在mixins中使用?

1 个答案:

答案 0 :(得分:2)

尝试类似的东西(未经测试)。

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

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