2010-04-06 34 views
0

下面是相關機型:可以手動管理關聯嗎?

用戶 產品 訂單

用戶可出售或購買產品 的訂單有買方,賣方和一個產品

我知道我能做到這與訂單和用戶之間的HABTM關係有關,但在我看來,在訂單表中放入以下列會更簡單:

:seller_id :buyer_id

並手動管理這些關係,因爲訂單隻能創建一次而且永遠不會編輯。然而,這看起來並不像Rails那樣,我想知道在HABTM關係中我是否在概念上丟失了某些東西。

回答

2

不,它不是一個紅寶石般的方式,雖然你沒有編輯的順序一旦創建。

在模型中使用以下關係我認爲它會工作。沒有檢查,但

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

謝謝,這是非常合情合理的:

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 

現在,您可以按如下方式使用關聯。 – sosborn 2010-04-06 03:54:34

0

您應該使用Rails協會爲此。 has_many協會是您的方案更好的選擇。

current_user.buys.create(:seller => u, :product => p) 
current_user.buys 
current_user.sells 
相關問題