满足条件时从连接表中删除记录

时间:2016-09-20 14:40:31

标签: ruby-on-rails

我有客户模型和订单模型。 客户可以拥有多个订单,并且要连接的表格是 customers_orders ,所以:

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

直到今天,我写了

customer.orders.clear

为了删除所有订单。它还删除了连接表中的记录。

我在该连接表中添加了一个列,我们称之为 blah 当blah列有特定值时,我想删除连接表中的记录 ,所以我尝试了:

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

但它不起作用。

为什么呢?我该怎么处理呢?

2 个答案:

答案 0 :(得分: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

通过这种方式,您可以同时获得实际订单和连接,并单独处理。

在您的示例中,blahOrderCustomerOrder

的一部分

如果在CustomerOrder中

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

如果在订单

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

destroy_alldelete_all之间的差异与天气有关或不运行回调。

答案 1 :(得分:0)

单个订单是否也有很多客户?

如果没有,那么您不需要customer_order表 - 您只需在订单表上有customer_id,客户has_many订单,订单属于客户。

除非客户:订单很多:很多,您不需要customer_orders