2009-04-24 4 views
3

Je viens de commencer à étudier l'utilisation de modèles plus avancés dans Rails. Un que j'utilise régulièrement, avec beaucoup de succès, est un modèle où une relation de référence croisée plusieurs-à-plusieurs est accédée par une classe qui est elle-même une sous-classe de la classe de base dans la relation plusieurs-à-plusieurs. De cette manière, la classe de référence croisée peut servir de remplaçant pour la classe de base.Héritage ActiveRecord avec différentes tables de base de données

Un bon exemple est le cas où un nœud de hiérarchie de navigation (NavigationNode) est renvoyé à un rôle d'utilisateur. Au point de référence croisée, une classe (RoleNavigationNode) peut hériter de NavigationNode et avoir toujours une connaissance intime du rôle de l'utilisateur.

Ma question est (dans le cas ci-dessus) RoleNavigationNode peut-il hériter de NavigationNode et accéder à la table de références croisées plutôt qu'à celle à laquelle accède NavigationNode - ceci bien sûr en utilisant ActiveRecord.

Je n'ai pas étudié l'association polymorphe, qui pourrait être plus appropriée.

Merci à l'avance ...,

Répondre

2

essayé set_table_name sur la sous-classe?

En outre, regardez dans le paramètre @abstract_class dans les classes de modèle. Enfin, ce dont vous avez besoin peut être simplement un Mixin que vous incluez dans les deux modèles.

De toute façon, ce que vous essayez de faire sonne plutôt un-ActiveRecord-ish. Vous pourriez vouloir donner un exemple plus clair de ce que vous essayez de réaliser, peut-être que nous pourrons trouver quelque chose de plus simple.

+0

Il peut être un peu ridicule de répondre à votre message comme ça (quatre mois plus tard). Mais merci ... j'avais oublié où j'avais posté cette question. Je travaillais sur le web dernièrement parce que cette question est revenue. Quoi qu'il en soit, je vais regarder dans vos commentaires - et c'est un peu un-quelque chose comme je me rends compte. –

2

Cela fonctionne dans Rails 3:

class Common < ActiveRecord::Base 
    @abstract_class = true 
    def common 
    "Foobar!" 
    end 
end 

class Model < Common 
end 

class AnotherModel < Common 
end 

Sans réglage abstract_class, Rails cherchera une table nommée commons dans votre base de données.

Questions connexes