2010-09-07 14 views
1

Rails 3 newbie here ... Je travaille à la création d'un système d'authentification qui ressemble (yammer) aux instances auxquelles les utilisateurs appartiennent. J'ai deux tablesCréation de tables de jointure pour les associations has_many & belongs_to

utilisateurs (email, mot de passe ...) belongs_to: par exemple

instance (nom de domaine, actif ....) has_many: utilisateurs

j'ai ajouté le belongs_to et has_many aux modèles mais le schéma n'a pas été mis à jour pour ajouter la jointure, qui je crois serait une colonne instance_id à la table de l'utilisateur. Comment cela se fait-il dans Rails 3? Pensées, suggestions?

Répondre

1

Vous devez ajouter ces colonnes au schéma par migrations.

http://guides.rubyonrails.org/migrations.html

Try:

scripts

/rails génèrent la migration AddInstanceToUsers

puis allez à votre db/migrations look dossier pour le nouveau fichier et la faire ressembler à:

class AddInstanceToUsers < ActiveRecord::Migration 

    def self.up 

    add_column :users, :instance_id, :integer 

    end 

    def self.down 

    remove_column :users, :instance_id 

    end 

end 

puis exécutez

rake db:migrate 

dans votre console.

+0

Merci Traîneau, je n'ai pas besoin de faire quoi que ce soit avec des références? Pour une raison quelconque, je pensais que Rails 3 était assez intelligent pour le faire automatiquement quand il voit le belongs_to et has_many – AnApprentice

+0

En outre, la colonne instance_id de l'utilisateur devrait avoir un index. Avez-vous besoin d'ajouter une autre migration pour que cela se produise? – AnApprentice

+1

Rails ne changera jamais quelque chose dans votre schéma si vous changez le modèle. Vous pouvez utiliser "t.references: instance" dans votre migration, voir le lien que j'ai posté. Vous pouvez ajouter l'index dans la même migration si vous le souhaitez. Il suffit d'ajouter la ligne "add_index: users,: instance_id" (sans les guillemets bien sûr) après la colonne add_column. – sled