【问题标题】:after_initialize never invoked in Rails 3 via mixin在 Rails 3 中从未通过 mixin 调用 after_initialize
【发布时间】:2012-04-26 01:07:24
【问题描述】:

我正在使用 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 => 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:Module 的未定义方法 `after_initialize'):

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

【问题讨论】:

    标签: ruby-on-rails ruby activerecord mixins


    【解决方案1】:

    尝试类似的方法(未测试)。

    module MyModule
      def self.included(base)
        base.after_initialize :generate_ids
      end
    
      def generate_ids
        logger.info "invoked" #never hit
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多