Динамически включать модуль в модель во время выполнения?

У меня "транзакция" (расширяет ActiveRecord ::Base ). У меня есть два разных типа транзакций: «Покупка» или «Пожертвование». Между ними достаточно совпадений, поэтому нет необходимости создавать две отдельные таблицы базы данных, поэтому у меня есть только одна таблица для транзакций со столбцом «тип элемента _».

Однако существуют разные методы и проверки для Покупки и Пожертвования, поэтому имеет смысл разделить их на два разных контроллера и модели. Вместо создания моделей ActiveBase (без таблиц )я пытаюсь использовать модули для каждой из них.

Вот как выглядит модуль «Покупка».

module Purchase
  def self.included(base)
    base.validates :amount, 
      :presence => true
  end

  def testing
    "testing"
  end
end

Вот как создается:(этот код находится в действии создания контроллера покупок )

@purchase = Transaction.new(params[:purchase]).extend(Purchase)

. Я могу позвонить @purchase.testing, и он возвращает «тестирование». Однако эта проверка не выполняется.

Если я включу модуль традиционным способом в модель транзакции с «включить покупку», то они сработают.

Любые идеи, как я могу сделать этот рабочий процесс? Я немного следил за этим:http://paulsturgess.co.uk/articles/84-how-to-include-class-and-validation-methods-using-a-module-in-ruby-on-rails

6
задан Cœur 15 December 2017 в 14:35
поделиться