Ruby on rails 具有ActiveRecord模型的代理对象-缺少方法\u有时不起作用

Ruby on rails 具有ActiveRecord模型的代理对象-缺少方法\u有时不起作用,ruby-on-rails,activerecord,proxy-classes,Ruby On Rails,Activerecord,Proxy Classes,我一直在使用我的应用程序模型作为其他定义行为的对象的代理 class Box < ActiveRecord::Base belongs_to :box_behavior, :polymorphic => true, :validate => true, :foreign_key => 'box_behavior_id', :dependent => :destroy [...] def initialize(opts = {}) sup

我一直在使用我的应用程序模型作为其他定义行为的对象的代理

  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
classboxtrue,:验证=>true,:外键=>'box\u behavior\u id',:依赖=>:destroy
[...]
def初始化(opts={})
超级(opts)
self.box\u behavior=BoxBehaviorDefault.new如果self.box\u behavior.blank?
结束
私有的
def方法_缺失(方法、*args和块)
超级的
救援指名员
返回self.box\u behavior.send(方法、*args和块)
结束
结束
因此,我在我的BoxBehavior对象上实现了所有方法,当我在一个box实例上调用一个方法时,它会将调用重定向到关联的BoxBehavior对象。除了我试图在我的购买模型上创建一个钩子,它从它的box对象中获取总数并保存它之外,一切都很好:

class Purchase < ActiveRecord::Base

  belongs_to :box

  before_validation_on_create { |r| r.total = r.box.total }
end
class-Purchase
当我尝试保存任何与框关联的购买对象时,会出现以下错误:

undefined method `total' for #<ActiveRecord::Associations::BelongsToAssociation:0x7fe944320390>
未定义的方法“总计”#

我不知道下一步该做什么。。。当我直接在box类中实现total方法时,它工作得很好。。。我能做些什么来解决这个问题?代理是否正常工作?

我发现Rails并不总是使用initialize来创建模型的新实例。所以我在初始化后使用了钩子并解决了问题

我发现Rails并不总是使用initialize来创建模型的新实例。所以我在初始化后使用了钩子并解决了问题