未定义的方法`association_class'代表nil:NilClass

时间:2013-11-18 10:51:36

标签: ruby-on-rails associations spree class-eval

我正在使用Spree 2.1并尝试添加新的支付网关,但此错误更为通用,因此Spree本身并不重要。

在向undefined method 'association_class' for nil:NilClasssource)类添加一些模块后,我遇到了该错误(Spree::PaymentMethod):

热潮/ payment_method_decorator.rb

Spree::PaymentMethod.class_eval do
  include Spree::Core::CalculatedAdjustments
end

Spree::Core::CalculatedAdjustments source

Spree::Gateway source

不幸的是,现在Spree::PaymentMethodsource)打破了一点,即:

n = Spree::PaymentMethod.first
=> #<Spree::Gateway::Bogus id: 1, (...)>
n.save
=> undefined method 'association_class' for nil:NilClass
n.calculator
=> undefined method 'association_class' for nil:NilClass

有谁知道为什么会发生这种情况以及如何解决这个问题?

事实上,我已经有了一个答案(经过几个小时的奋斗),但也许有人会给出一个更好的答案。也许答案是非常明显的,但它不适合我,我找不到任何与SO相关的内容,所以希望其他具有相似RoR知识水平的人不必再花上几个小时。

1 个答案:

答案 0 :(得分:0)

所以答案是:

正如上面链接中显示的那样,Spree::Gateway继承自Spree::PaymentMethod,我的自定义付款方式继承自Spree::Gateway类 - 如下所示:

module Spree class Gateway::CustomMethod < Gateway end end

我所要做的只是在Spree::Core::CalculatedAdjustments中加入Spree::Gateway

Spree::Gateway.class_eval do include Spree::Core::CalculatedAdjustments end

从那时起它正在运作。