Неопределенный метод created_to usign относится к Rails, почему?

Я пытаюсь расширить модель рельсов из драгоценного камня.

С помощью contern мне удалось расширить методы класса, но я не могу расширить ассоциации. included do возвращает undefined method belongs_to. Я думаю, что Rails не может правильно загрузить класс...

модель находится в движке, и я пытаюсь получить к ней доступ из моего gem.

Вот код:

# mygem/config/initializers/mymodel_extension.rb
require 'active_support/concern'

module MymodelExtension
  extend ActiveSupport::Concern

  #  included do
  #    belongs_to :another
  #  end

  class_methods do
    def swear
        return "I'm not doing it again"
    end
  end

end

class Myengine::Mymodel
    include MymodelExtension
end

Из командной строки:

Myengine::Mymodel.swear
# => "I'm not doing it again"

Если я раскомментирую included do, я получу эту ошибку undefined method 'belongs_to' for Myengine::Mymodel:Class (NoMethodError).


person a.barbieri    schedule 23.09.2016    source источник


Ответы (1)


Myengine::Mymodelclass должен наследоваться от ActiveRecord::Base, чтобы иметь метод belongs_to определенный.

ActiveRecord::Base включает набор модулей, один из которых Associations , где belongs_to association определено.

person Andrey Deineko    schedule 23.09.2016
comment
Однако один вопрос: если я сделаю class Spina::PagePart < ActiveRecord::Base, расширим ли я класс? Я просто хочу убедиться, что не переопределяю его. - person a.barbieri; 23.09.2016
comment
@ a.barbieri нет такой вещи, как расширение класса в Ruby. Вы наследуете. Любые методы, определенные в вашем классе (если ЛЮБОЙ шанс, что они также определены в AR::Base), будут иметь приоритет, так что не беспокойтесь - person Andrey Deineko; 23.09.2016