2016-09-20 7 views
0

私は顧客モデルと注文モデルを持っています。 顧客がmultuple注文を持つことができ、それらの間の接続にテーブルがそうcustomers_ordersです:条件を満たすときに接続テーブルからレコードを削除

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

今日まで、私はすべての注文を削除するために

customer.orders.clear 

を書きました。また、接続テーブルからレコードを削除しました。

この接続テーブルに列を追加しました。をblahと呼びます。 私は何とか列が特定の値を持っているので、私が試したときに、接続テーブルからレコードを削除する:

customer.orders.where("blah = 3").clear 
しかし、それは動作しません。

なぜですか?そして私はそれをどのように扱うことができますか?

class CustomerOrders 
    belongs_to :customer 
    belongs_to :order 
end 

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

あなたは、実際の受注、および接続の両方を取得し、両方を個別に対処することができますこの方法:

答えて

0

私は、あなたはおそらくのようなhas many throughここ

と仮定すると、何かを使用することを考えています。 destroy_alldelete_all間の順序で

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

差は天候に関係している場合blahが何であるかをあなたの例では

はCustomerOrderが

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

であればOrderCustomerOrder

の一部です。コールバックは実行されません。

0

単一の注文にも多くの顧客がいますか?

そうでなければ、customer_orderテーブルは必要ありません。注文テーブルにはcustomer_idがあり、customersにはhas_many注文があり、注文は顧客に属しています。

注文が多い場合:多く、お客様は必要ありません._order

関連する問題