我有客户模型和订单模型。 客户可以拥有多个订单,并且要连接的表格是 customers_orders ,所以:
Customer >> has_many: orders, :class_name => "CustomerOrders"
直到今天,我写了
customer.orders.clear
为了删除所有订单。它还删除了连接表中的记录。
我在该连接表中添加了一个列,我们称之为 blah 。 当blah列有特定值时,我想删除连接表中的记录 ,所以我尝试了:
customer.orders.where("blah = 3").clear
但它不起作用。
为什么呢?我该怎么处理呢?
答案 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
通过这种方式,您可以同时获得实际订单和连接,并单独处理。
在您的示例中,blah
是Order
或CustomerOrder
如果在CustomerOrder中
customer.customer_orders.where(blah: 3).destroy_all
如果在订单
customer.customer_orders.where({orders: { blah: 3}}).destroy_all
destroy_all
和delete_all
之间的差异与天气有关或不运行回调。
答案 1 :(得分:0)
单个订单是否也有很多客户?
如果没有,那么您不需要customer_order表 - 您只需在订单表上有customer_id,客户has_many订单,订单属于客户。
除非客户:订单很多:很多,您不需要customer_orders