ActiveRecord 不再在数组中查找重复的 ID 并保存为拥有和属于多的关系,Rails 4.2.8

ActiveRecord no longer finding duplicate IDs in array and saving for has-and-belongs-to-many relationship, Rails 4.2.8

我今天晚上从 rails 4.2.0 升级到 rails 4.2.8。唯一的主要痛苦是弄清楚为什么我的 item_ids 数组在保存到我的 items_payments HABTM 关系时不再有重复项。

这在 4.2.0 中工作得很好......但是现在,例如,如果我在保存付款之前分配 @payment.item_ids = [14,14],rails 和 activerecord 抛出这个错误:Couldn't find all Items with 'id': (14, 14) [WHERE "items"."id" IN (14, 14)] (found 1 results, but was looking for 2)

如果id数组没有重复,那么保存就好了。我需要相同的 item_id 出现不止一次,但是,在用户购买一个项目的多个实例的情况下。我该怎么做才能再次正常?我知道这可能与已弃用的查找器有关...但是我如何在 4.2.8 和最终 rails 5.0 中以正确的方式执行此操作?

编辑:这是我的控制器、模型和架构中的代码。升级 rails 时我没有更改任何内容...并且在保存诸如 [14,12,5] 之类的项目 ID 数组时它会工作得很好。它只是不允许我保存重复的项目 ID,比如 [14,14]

控制器:

items_array = []
items.each do |item|
    quantity = params[:payment][:item_quantity]["#{item.id}"][:quantity]
    quantity = quantity.to_i
    quantity.times do
        items_array.push(item.id)
    end
end

@payment.item_ids = items_array

架构:

create_table "items_payments", id: false, force: :cascade do |t|
  t.integer "item_id"
  t.integer "payment_id"
end

支付模式:

has_and_belongs_to_many :items

物品型号:

has_and_belongs_to_many :payments

最后,我的控制台输出:

(0.2ms)  SELECT COUNT(*) FROM "items" WHERE "items"."id" IN (14, 14)
  CACHE (0.0ms)  SELECT COUNT(*) FROM "items" WHERE "items"."id" IN (14, 14)
Completed 404 Not Found in 133ms (ActiveRecord: 8.6ms)

ActiveRecord::RecordNotFound (Couldn't find all Items with 'id': (14, 14) [WHERE "items"."id" IN (14, 14)] (found 1 results, but was looking for 2)):
  app/controllers/payments_controller.rb:196:in `block in create'
  app/controllers/payments_controller.rb:172:in `create'

我认为这只是 Rails 4.2.8 的 ActiveRecord 中的一个潜在错误。如果您正在慢慢升级到 Rails 5,只需升级到 Rails 4.2.9,这个问题就会完全消失...