2017-08-28 3 views
1

Dans mon plugin, je hérite de quelques modèles du moteur et j'ajoute paramètres de mobilité.Comment étendre dans mon application un modèle AR de mon moteur afin que Mobility ne se plaint pas?

# my enginge 
module MyEngine 
    class Foo < ApplicationRecord 
    def self.say_hi 
     return "hi" 
    end 
    end 
end 
# my plugin 
require 'my-engine' 
module MyEngine 
    class Foo 
    include Mobility 
    translates :name, type: :string 
    end 
end 

Maintenant, si je cherche le modèle dans la console Rails:

MyEngine::Foo.say_hi 
ArgumentError: KeyValue backend can only be used by ActiveRecord or Sequel models 

Si je commente sur la mobilité paramètres tout fonctionne:

MyEngine::Foo.say_hi 
=> "hi" 

Comment étendre dans mon application un modèle AR MyEngine::Foo alors Mobility ne se plaint pas?

+0

je tentais la méthode expliquée [ici] (https://stackoverflow.com/a/45252778/1498118) mais je reçois toujours l'erreur. –

+0

Hmm Je ne suis pas sûr de comprendre la question. Vous ne pouvez pas "traduire" un attribut sur une classe en utilisant le backend "key_value" sauf si la classe hérite de "ActiveRecord :: Base" ou de "Sequel :: Model", sinon Mobility ne sait pas comment configurer méthodes correctement. Si vous voulez faire quelque chose de plus flexible, vous pouvez utiliser le générateur de module 'Mobility :: Attributes' directement, que vous pouvez créer sans connaître la classe dans laquelle il sera inclus immédiatement. Si vous pouvez fournir plus de détails, je peux vous expliquer comment faire cela. –

+0

Ne pouvez-vous pas avoir 'class Foo

Répondre

0

This answer aide à étendre un modèle de moteur à partir d'un plugin, mais n'aide pas à la mobilité.

Pour utiliser modifier MyEngine::Foo pour utiliser mobilty, vous devez créer un initialiseur config/initializers/mobility_models_extension.rb (assurez-vous que le nom de fichier est alphabétiquement après le fichier mobility.rb).

:: MyEngine::Foo(:include, Mobility) 
:: MyEngine::Foo.send(:translates, :name, type: :string) 

Voir senddocumentation et initializers documentation