2011-12-18 3 views
1

J'apprends les rails et j'essaie de comprendre les associations de base de données. Si j'ai une table de base de données avec say Users qui a un ID, un nom, un email, etc. et une table de message avec le message, un expéditeur (utilisateur) et un destinataire (également un utilisateur), comment configurer la migration et le des modèles. Ici, j'utilise Rails 3.1. Je suis assez sûr que je peux le faire avec un seul utilisateur dans la table des messages avec les références: Utilisateur dans la migration, mais je ne suis pas sûr de la façon de mettre en place deux d'entre eux.Rails Database Association/Migration

+0

OK, il semble comme dans mon modèle je veux quelque chose comme: 'classe Message appartient à: expéditeur, nom_classe => Utilisateur appartient_à: destinataire, nom_classe => Utilisateur end' mais je ne suis toujours pas sûr de ce que j'aurais mis dans la migration pour obtenir les colonnes sender_id et recipient_id. – slabounty

Répondre

7

Quelques ressources pour vous aider à démarrer: Rails Tutorial: User ModelRoR Guides: Migrations

d'abord votre migration des utilisateurs

$ rails generate model User name:string email:string 

Ensuite, votre message migration

$ rails generate model Message message:string user_id:integer 

Ensuite, dans vos messages modèle (/ app/models/messages.rb)

belongs_to :user 

Et dans votre modèle utilisateur (/app/models/users.rb)

has_many :microposts 

Évidemment, cela est une esquisse de ce qui doit arriver, mais cela ne devrait vous aider à démarrer!

+0

Je ne peux pas ajouter mon commentaire sous le vôtre pour une raison quelconque, mais le commentaire que vous avez fait ne change pas ma réponse. Lire un peu des liens que j'ai publiés vous aiderait vraiment à comprendre ce qui se passe, je pense. –

+0

Merci, c'est le livre que j'utilise pour comprendre les choses. J'ai la migration en ce moment, et le modèle Message avec deux: appartient à des lignes ... ' appartient à: expéditeur,: class_name =>" Utilisateur ",: foreign_key =>" sender_id " appartient à: destinataire,: class_name => "User",: foreign_key => "recipient_id" ' Maintenant, je ne suis pas sûr de ce qui devrait aller dans le modèle de l'utilisateur. Il semble qu'il devrait y avoir deux lignes "has_many" pour l'envoi et une pour la réception, mais je ne sais pas exactement comment les spécifier. Pensées? – slabounty

+0

OK, voici ce que j'ai fini avec (excuses d'avance pour ce que je prévois d'être formatage f'd ... – slabounty

0

OK, voici ce que j'ai fini avec.

D'abord la migration ...

class CreateMessage < ActiveRecord::Migration 
    def change 
    create_table :messages do |t| 
     t.string :greeting 
     t.integer :sender_id 
     t.integer :recipient_id 

     t.timestamps 
    end 
    end 
end 

suivant dans le modèle de message ...

# Message model 
belongs_to :sender, :class_name => "User", :foreign_key => "sender_id" 
belongs_to :recipient, :class_name => "User", :foreign_key => "recipient_id" 

et dans le modèle de l'utilisateur ...

# Message model 
belongs_to :sender, :class_name => "User", :foreign_key => "sender_id" 
belongs_to :recipient, :class_name => "User", :foreign_key => "recipient_id"