2011-08-10 5 views
0

Im problème d'avoir à utiliser table_name_prefix sur mes projets. J'ai une application principale dans mon projet qui a d'autres applications comme plugins, ces plugins fonctionnent comme un sous-système de l'application principale.Rails 3 Plugin - Active Record table_name_prefix

Pour organiser les tables sur la base de données des sous-systèmes, je voudrais utiliser le table_name_prefix du ActiveRecord Plugin.

Si je mets init.rb de la commande du plugin config.active_record.table_name_prefix = « per_ » l'application principale ne fonctionnera pas parce que le ActiveRecord va essayer de trouver des « per_users », mais la seule chose que je veut que seul le plugin sur mon application principale utilise le préfixe "per_".

J'ai essayé de créer un dossier de rails à mon plug-in avec la commande ci-dessus, mais le même problème se produit, toute l'application pour essayer de trouver le nom de la table préfixé.

Une alternative est d'utiliser la set_table_name dans le modèle de plug-in, mais ce ne est pas bon pour moi parce que Im le développement des sous-systèmes comme rails plugin et je ne veux pas changer les modèles une fois mis le sous-système à l'application principale.

Quelqu'un peut-il m'aider?

+0

Quelle version de rails utilisez-vous? – Rob

Répondre

2

Pour avoir chaque plugin avec préfixe propre, pour Rails 3, essayez à organiser vos modèles à l'intérieur de plug-in dans l'espace de noms:

class Foo::Bar < ActiveRecord::Base 
... 
end 

module Foo 
    def self.table_name_prefix 
    'foo_' 
    end 
end 

Cette volonté fonctionne juste à l'intérieur du plug-in sans changer quoi que ce soit dans l'application principale. Autre approche consiste à utiliser un modèle principal et hériter des autres comme ça:

class Foo < ActiveRecord::Base 
    def self.table_name_prefix 
    'foo_' 
    end 
end 

class Bar < Foo 
... 
end 

parfois cette approche est utilisée pour étendre tous les modèles avec des fonctionnalités supplémentaires.

Plus d'informations dans la documentation Rails here

0

Jetez un oeil à this question. J'ai rencontré le même problème, j'ai oublié le nom de mon application (module principal) avait le même nom qu'un espace de noms pour mes modèles.

Questions connexes