2010-05-25 6 views
0

Je travaille sur un projet où le modèle de données est:modèle de rails utilisant la hiérarchie de classe à partir d'une gemme externe?

  • mis en œuvre dans un gem
  • ne pas utiliser ActiveRecord, ni aucun stockage de base de données relationnelle (en fait il repose sur CouchDB)
  • marques l'utilisation des espaces de noms
  • fait un usage intensif de l'héritage de classe

Pour simplifier le schéma, disons que nous avons la classe racine suivante:

module Marketplace 
module Food 
    class Fruit 
    … 
    end 
end 
end 

Et deux classes spécialisées:

module Marketplace 
module Food 
    class Peach < Marketplace::Food::Fruit 
    … 
    end 

    class Tomato < Marketplace::Food::Fruit 
    … 
    end 
end 

fin

Je voudrais Rails pour afficher (et gérer) tous les fruits quel que soit leur nature, sans modifier la sorcière modèle fonctionne parfaitement sur Rails.

Le problème est qu'ActionView semble utiliser un certain nombre de conventions pour définir les chemins et les URL qui seront basés sur les noms de classe réels.

Donc, si je présente un Apple, dans un tableau avec des actions show/delete, les rails rechercheront une méthode nommée marketplace_food_apple_path et similaire qui bien sûr n'existe pas.

Existe-t-il un moyen d'indiquer les structures ActionView :: Base qu'un Apple est un Fruit?

Je m'attendrais à ce que cette «distribution de base» soit «triviale» pour un framework basé sur Ruby mais il semble que cet exemple simple de modèle orienté objet ne fonctionne pas avec Rails?

Comment gérez-vous les modèles de données 'objet complexe' dans les rails?

Ou est-ce simplement hors de portée de Rails?

Merci pour les pointeurs!

Répondre

-1

OK comme je vois il y a beaucoup de réponses utiles;).

Il confirme essentiellement mes doutes sur Rails que je vois plutôt comme une sorte de VB: facile à apprendre, sympa pour les petites choses (shopping ou sites communautaires) mais très limité. Rails est complètement hors de portée quand il arrive à gérer la logique et les données métier complexes!

Comme Rails 3.0 ne semble pas être la réponse ni (ok, nous avons plusieurs années ORM mais nous ne sommes toujours pas en mesure d'utiliser l'héritage dans le modèle) je suis passé à Ramaze, un petit cadre qui ne fait aucune hypothèse sur la façon Les données sont organisées, ce qui le rend adapté à presque tous les types de besoins Web.

Si vous faites face à des contraintes de modèles avec Rails, vous devriez peut-être oublier Rails et vérifier Ramaze!

0

http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/ < - probablement ce que vous voulez, sauf si vous cherchez simplement à argumenter l'héritage unique par rapport à l'héritage multiple strawman.

+0

Non ce n'est pas ce que je veux du tout! Je cherchais un moyen de gérer un modèle existant qui utilise la classe * class * inhertance dans Rails. Semble que ce n'est pas possible, ni cela sera possible dans Rails 3.0. C'est dommage et c'est pourquoi je suis passé à Ramaze. L'inclusion/extension de module est une fonctionnalité intéressante mais qui ne correspond pas du tout à notre schéma de modèle de données, principalement parce que le modèle existe déjà et fonctionne parfaitement avec Rails. Je ne cherche donc pas à changer nos composants pour les adapter à Rails, mais à utiliser Rails pour exposer sur le Web une logique d'application existante. – devlearn

Questions connexes