2012-08-26 2 views
0

J'aurais une question sur les modèles et les migrations dans les rails.Modèle de liaison avec migration en RoR

Prenons un exemple. J'ai un modèle membre:

class Member < ActiveRecord::Base 
    attr_accessible :a, :b 
end 

Et la migration correspondante:

class CreateMembers < ActiveRecord::Migration 
    def change 
     create_table :members do |t| 
      t.string :a 
      t.string :b 
     end 
    end 
end 

Je me rends compte plus tard qu'un membre a une voiture. Donc, je dois créer le modèle de voiture etc ... Maintenant, je dois modifier les deux modèles en ajoutant des règles belong_to et has_one mais aussi de créer une nouvelle migration et ajouter car.integer :member_id

Je trouve assez peu pratique et redondant. Y a-t-il une astuce permettant de le faire automatiquement? De plus, contrairement à Symfony2 où les modèles sont totalement dissociés de la base de données, nous devons ici informer une colonne foreign_key. Est-il possible d'écrire quelque chose comme car.member :member au lieu de car.integer :member_id? C'est un détail, mais j'apprécierais.

Merci :)

Répondre

1

Rails fournit des générateurs intelligents:

Essayez:

rails g model car member:references 

Cela génère automatiquement des migrations complètes avec le member_id comme une clé étrangère (même avec un indice) et la ligne belongs_to :member est également déjà ajoutée à la classe Car.

rails g model car member:references génère ceci:

class CreateCars < ActiveRecord::Migration 
    def change 
    create_table :cars do |t| 
    t.references :member 

    t.timestamps 
    end 
    add_index :cars, :member_id 
    end 
end 

et ceci:

class Car < ActiveRecord::Base 
    belongs_to :member 
end 

La seule chose à faire est d'ajouter la ligne has_one :car à la classe Member.

Pour en savoir plus sur les générateurs voir: A Guide to The Rails Command Line

+0

Ok, mais comment puis-je faire si je l'ai déjà généré mon modèle de voiture et je veux le mettre à jour? –

+0

Dans ce cas, je suis aussi désemparé. Pardon. Mais lors de la génération de migrations, vous pouvez ajouter des drapeaux pour ajouter automatiquement les colonnes au fichier de migration comme suit: 'rails g migration add_member_id_to_cars member_id: integer', mais vous le faites peut-être déjà =). – rathrio