2013-10-16 7 views
1

Impossible de comprendre comment l'association Rails avec les modèles fonctionne. Voici question simple:Rails association avec les modèles et la migration

Il y a deux tables

produits

id| name | status 
1 | Tube | 0 
2 | Pillar | 1 
3 | Book | 0 
4 | Gum  | 1 
5 | Tumbler | 2 

Statuts de

status | name 
0  | Unavailable 
1  | In stock 
2  | Discounted 

Avec ~ mêmes noms pour les modèles et les contrôleurs.

Je ne sais pas quoi créer une nouvelle table de statut dans chaque nouveau produit. Et je veux montrer le nom du statut dans erb. Que dois-je écrire dans les modèles et dans le fichier de migration (par exemple pour qui appartiennent, has_one ou has_many ...)?

Répondre

0

Le produit doit belongs_to :status et le statut devrait has_many :products pour un simple-à-plusieurs, et vous n'êtes pas obligé de définir un statut pour un produit. Dans erb vous utiliseriez <%= @product.status.name %>. Pour mettre en place ces migrations, create_table :products do |t| t.string :name; t.integer :status_id; end et create_table :statuses do |t| t.string :name; end

0

d'abord pour conformément aux conventions de rails vous devez renommer product.status à product.status_id.

produit belongs_to: état
Statut has_many: Produits

Product.find (1) .status.name devrait être 'Non disponible'

0

Si vous comprenez les bases de la base de données relationnelle, alors il est à peu près la même chose.
Lorsque vous dites, status belongs_to :product et product has_many :statuses, cela signifie essentiellement que la table d'état a une clé étrangère que vous pouvez utiliser pour récupérer toutes les lignes d'état pour un ID produit donné.

Pour établir cette relation, vous devrez créer une nouvelle colonne product_id dans votre table statuts:

rails g migration AddProductIdToStatuses product_id:integer 

Une fois fait, ajoutez ce qui suit dans votre product.rb:

has_many :statuses 

et ceci dans votre status.rb:

belongs_to :product 
+0

Ou vous pouvez ajouter une référence comme dit dans ce lien: http://stackoverflow.com/a/1635 4779/2197555 – gm2008

Questions connexes