2010-04-06 2 views
0

Voici les modèles pertinents:Est-il acceptable de gérer les associations manuellement?

utilisateur produit Commander

Un utilisateur peut vendre ou acheter des produits Une commande a un acheteur, un vendeur et un produit

Je sais que je peux faire ceci avec une relation HABTM entre les commandes et l'utilisateur, mais il me semble qu'il serait plus simple de mettre dans la table de commande les colonnes suivantes:

: seller_id : buyer_id

et de gérer ces relations manuellement car les commandes sont créées une seule fois et jamais modifiées. Cependant, cela ne semble pas très semblable à Rails et je me demande s'il me manque quelque chose de conceptuellement dans la relation HABTM.

Répondre

2

non ce n'est pas une façon rubis bien que vous ne soyez pas édité commande une fois créé.

Utilisez la relation suivante dans le modèle, je pense que cela va fonctionner. Aucune vérification si

User.rb 
has_many :users 
has_many :purchase, :class_name =>Order, :foreign_key=>'buyer_id' 
has_many :sells, :class_name =>Order, :foreign_key=>'seller_id' 

Product.rb 
belongs_to :user 
has_many :orders 

Order.rb 
belongs_to :buyer, :class_name =>User, :foreign_key=>'buyer_id' 
belongs_to :seller, :class_name =>User, :foreign_key=>'seller_id' 
belongs_to :product 
+0

Merci, cela a un sens parfait. – sosborn

0

Vous devez utiliser les associations Rails pour cela. L'association has_many est un meilleur choix pour votre scénario.

class User < ActiveRecord::Base 
    has_many :buys, :class_name => "Order", :foreign_key => "buyer_id" 
    has_many :sales, :class_name => "Order", :foreign_key => "seller_id" 
end 

class Product < ActiveRecord::Base 
end 

class Order < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :buyer, :class_name => "User", :foreign_key => "buyer_id" 
    belongs_to :seller, :class_name => "User", :foreign_key => "seller_id" 
end 

Maintenant, vous pouvez utiliser l'association comme suit:

current_user.buys.create(:seller => u, :product => p) 
current_user.buys 
current_user.sells 
Questions connexes