1
我一直在使用我的應用程序的模型作爲定義行爲的其他對象的代理。使用ActiveRecord模型的代理對象 - method_missing有時無法工作
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對象的所有方法,當我調用一個方法在框實例然後將呼叫重定向到相關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>
而且我不會對下一步該怎麼做......當我在框類直接實現總方法然後正常工作的線索......我該怎麼辦解決這個問題?代理是否正常工作?