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,这个问题就会完全消失...
我今天晚上从 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,这个问题就会完全消失...