2010-06-04 3 views
3

Dans Django, vous décrivez complètement vos modèles dans models.py. Dans Rails avec ActiveRecord, vous décrivez une partie d'un modèle dans le répertoire/models, et une partie dans les migrations. Ensuite, ActiveRecord introspecte les propriétés du modèle à partir des tables de base de données existantes. Mais je trouve que les migrations, les colonnes et les tables sont mal à la tête. Comment puis-je faire comme Django - il suffit de déclarer toutes les propriétés du modèle au lieu de les introspecter à partir des tables de la base de données?ActiveRecord sans configurer les tables de base de données? (déclaratif comme Django)

Et pour plus de crédit, expliquez où et pourquoi ce serait une mauvaise idée. :)

Répondre

2

Si vous détestez migrations, essayez NoSQL. Pas de migrations!

Vous ajouteriez simplement des propriétés à votre document lorsque vous en auriez besoin. Dans votre code, gérer le fait qu'ils peuvent ne pas exister et bam!

Je pris la définition du modèle suivant (vous remarquez ne pas hériter forme activerecord) d'un blog about tekpub recommande également le Herding Code podcast

class Production 

    include MongoMapper::Document 

    key :title, String, :required => true 
    key :slug, String, :unique => true, :required => true, :index => true 
    key :description, String 
    key :notes, String 
    key :price, BigDecimal, :numeric => true 
    key :released_at, Date, :default => Date.today 
    key :default_height, String, :default => '600' 
    key :default_width, String, :default => '1000' 
    key :quotes, String 

    #royalty info 
    key :producers, String 

    timestamps! 
end 
1

Essayez le auto_migrations plugin. Je ne pense pas que ce soit une mauvaise idée pour le développement, mais je passerais aux migrations après être passé en production quand il y a des données critiques dans la base de données.

Remplacer ActiveRecord avec DataMapper, qui fonctionne dans Rails 3. Il a le style dont vous parlez, avec la description des champs de données d'un modèle dans le code du modèle au lieu d'un schéma de base de données distinct fichier.

1

Je pense que DataMapper est ce que vous demandez. Une fois configuré, vous utiliserez DataMapper.auto_migrate! ou DataMapper.auto_upgrade !. Le premier supprimera les tables si elles existent avant de les créer, détruisant ainsi toutes les données. Ce serait mauvais pour la production. Ce dernier est la façon dont vous évitez de perdre des données, et devrait être très bien pour la production.

Sans savoir exactement ce qu'il fait, je suppose qu'il inspecte les tables au démarrage pour déterminer s'il faut modifier la base de données. Cela peut faire baisser le temps de démarrage, en particulier avec beaucoup de modèles/tables. Ce qui est en fait l'une des bonnes raisons de considérer NoSQL - spécifiquement Mongo comme mentionné ci-dessus. C'est rapide. Très rapide, et donc le coût de démarrage est beaucoup, beaucoup moins. MongoMapper est le chemin à parcourir. Le tekpub blog post est un must. J'ai entendu parler de DataMapper pour la première fois à propos de Merb, il est donc logique que ce soit dans les rails 3. Je ne sais pas si vous pouvez l'utiliser dans les rails 2.x.

Questions connexes