1

モデル (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 (アクション => 新規)*

# 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'):

このコールバックはミックスインでは使用できないと思いますか?

4

1 に答える 1

2

そのようなものを試してください(テストされていません)。

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

  def generate_ids
    logger.info "invoked" #never hit
  end
end
于 2012-04-13T16:46:14.967 に答える