モデル (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'):
このコールバックはミックスインでは使用できないと思いますか?