неопределенный метод `association_class' для nil:NilClass

Я работаю с Spree 2.1 и пытаюсь добавить новый платежный шлюз, но эта ошибка более общая, поэтому сам Spree здесь не так важен.

Я столкнулся с этой ошибкой (undefined method 'association_class' for nil:NilClass) после добавления некоторого модуля в Spree::PaymentMethod (исходный):

веселье/payment_method_decorator.rb

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

(Spree::Core::CalculatedAdjustments источник)

(Spree::Gateway источник)

К сожалению, сейчас Spree::PaymentMethod (источник) немного ломается, т.е.

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 не придется тратить на это еще несколько часов.


person zrl3dx    schedule 18.11.2013    source источник
comment
Что вы сделали, чтобы это исправить? Можете ли вы ответить на свой вопрос? Я столкнулся с той же проблемой.   -  person maikel    schedule 11.05.2016
comment
@maikel извините за поздний ответ, мне пришлось покопаться в своем старом ноутбуке для этого проекта;) Я разместил ответ ниже.   -  person zrl3dx    schedule 15.05.2016


Ответы (1)


Итак, ответ был:

Как видно из приведенных выше ссылок, 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

и с тех пор работает.

person zrl3dx    schedule 15.05.2016