如何在Rails中销毁记录时删除多列唯一索引?

时间:2015-05-08 07:15:43

标签: ruby-on-rails ruby spree

我正在使用Rails 4.2上的spreecommerce 3.0.2应用

Spree在spree_shipping_rates表上定义了一个索引(取自我的schema.rb文件):

add_index "spree_shipping_rates", ["shipment_id", "shipping_method_id"], name:     "spree_shipping_rates_join_index", unique: true, using: :btree

但是,当spree_shipping_rates记录被销毁时,似乎索引条目仍然存在,因为我在再次创建相同记录时遇到以下错误

PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "spree_shipping_rates_join_index"
DETAIL:  Key (shipment_id, shipping_method_id)=(3, 3) already exists.

我的问题是如何在销毁spree_shipping_rates记录时确保删除关联的唯一索引?

某些背景信息:

在狂欢中,当用户签出并输入装运和帐单地址并保存时,将创建订单的新货件并销毁任何现有货件。

checkout.rb line 95:

if states[:delivery]
    before_transition to: :delivery, do: :create_proposed_shipments
    .
    .
end 

order.rb line 474:

def create_proposed_shipments
  adjustments.shipping.delete_all
  shipments.destroy_all
  self.shipments = Spree::Stock::Coordinator.new(self).shipments
end

shipment.rb line 22:

has_many :shipping_rates, -> { order('cost ASC') }, dependent: :delete_all

如您所见,当订单的货物被销毁时,所有相关的运费都会被“删除”。

上述代码块中的:delete_all是否不删除索引?这应该是:destroy吗?

0 个答案:

没有答案