2016-09-20 97 views
0

我有一個客戶模型和訂單模型。 客戶可以有multuple訂單,並表來連接它們之間是customers_orders這樣:當滿足條件時從連接表中刪除記錄

Customer >> has_many: orders, :class_name => "CustomerOrders" 

直到今天,我以刪除所有訂單中寫道

customer.orders.clear 

。它還刪除了連接表中的記錄。

我在該連接表中添加了一列,我們稱它爲blah我想從連接表當嗒嗒塔具有一定的價值刪除的記錄,所以我嘗試:

customer.orders.where("blah = 3").clear 

但它不工作。

爲什麼?我該如何處理?

回答

0

我在想,你可能想使用一個has many through這裏

假設是這樣的:

class CustomerOrders 
    belongs_to :customer 
    belongs_to :order 
end 

class Customer 
    has_many :customer_orders 
    has_many :orders, through: :customer_orders 
end 

這樣你就可以同時獲得實際訂單,以及連接和處理這兩種獨立。

在你的榜樣

如果CustomerOrder

customer.customer_orders.where(blah: 3).destroy_all 

如果爲了

customer.customer_orders.where({orders: { blah: 3}}).destroy_all 

差異和delete_all之間destroy_all與天氣做的是blahOrder部分或CustomerOrder

或者不運行回調。

0

單個訂單是否也有許多客戶?

如果不是,那麼你不需要一個customer_order表 - 你只需要在訂單表上有一個customer_id,而customer has_many命令,並且該訂單屬於一個客戶。

除非客戶:訂單很多:很多,您不需要customer_orders

相關問題