Rails-сделать модель без базы данных taggable

У меня есть модель без стола, как это:

class Wiki 
    include ActiveModel::AttributeMethods
    include ActiveModel::Validations
    include ActiveModel::Conversion
    extend ActiveModel::Naming

    # No Database
    def persisted?
        false
    end
    # ...
end

Когда я заявляю acts_as_taggableв этой модели, я получил undefined local variable or method 'acts_as_taggable'за это. Однако я попытался включитьActiveModel::Model, это все еще не работает. Любые идеи я могу сделать мою tableless модель быть taggable?

1 ответ

  1. Как вы можете видеть из исходного кода плагина, он требует, чтобы вы использовали его с AR. Она включает себя в ActiveRecord::Base.

    Таким образом, вы можете добавить их в свой класс, Как так:

    class Wiki 
        include ActiveModel::AttributeMethods
        include ActiveModel::Validations
        include ActiveModel::Conversion
        extend ActiveModel::Naming
    
        # Adding `acts_as_taggable`
        extend ActsAsTaggable::Taggable
        include ActsAsTaggable::Tagger
    
        # No Database
        def persisted?
            false
        end
        # ...
    end
    

    Но!

    Но, опять же, вам придется включить больше модулей AR, чтобы заставить его работать. Так, gem требует, чтобы ваш класс AR определенные методы , которые доступны в ActiveRecord::Baseклассе, такие какhas_many, и т.д.

    Например здесь:

    has_many :taggings, :as => :taggable, :dependent => :destroy, :include => :tag, :class_name => "ActsAsTaggable::Extra::Tagging"
    has_many :base_tags, :through => :taggings, :source => :tag, :class_name => "ActsAsTaggable::Tag"