私は自分のアプリケーションのモデルを、動作を定義する他のオブジェクトへのプロキシとして使用してきました。
class Box < ActiveRecord::Base
belongs_to :box_behavior, :polymorphic => true, :validate => true, :foreign_key => 'box_behavior_id', :dependent => :destroy
[...]
def initialize(opts = {})
super(opts)
self.box_behavior = BoxBehaviorDefault.new if self.box_behavior.blank?
end
private
def method_missing(method, *args, &block)
super
rescue NoMethodError
return self.box_behavior.send(method,*args,&block)
end
end
そのため、BoxBehaviorオブジェクトにすべてのメソッドを実装し、boxインスタンスでメソッドを呼び出すと、関連付けられたboxbehaviorオブジェクトに呼び出しをリダイレクトします。ボックスオブジェクトから合計を取得して保存する購入モデルにフックを作成しようとした場合を除いて、すべて正常に機能します。
class Purchase < ActiveRecord::Base
belongs_to :box
before_validation_on_create { |r| r.total = r.box.total }
end
ボックスが関連付けられている購入オブジェクトを保存しようとすると、次のエラーが発生します。
undefined method `total' for #<ActiveRecord::Associations::BelongsToAssociation:0x7fe944320390>
そして、私は次に何をすべきかについての手がかりを持っていません...私がboxクラスに直接totalメソッドを実装するとき、それはうまくいきます...これを解決するために私は何ができますか?プロキシが正しく機能していませんか?