Этим вечером я обновился с рельсов 4.2.0 до рельсов 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)
Если массив идентификаторов не имеет дубликатов, то он просто отлично сохраняет. Мне нужно, чтобы один и тот же item_id появлялся более одного раза, в случае, если пользователь покупает более одного экземпляра элемента. Как мне сделать так, чтобы это снова было нормально? Я знаю, что это может быть связано с устаревшими поисковиками ... но как мне сделать это правильно в 4.2.8 и, в конечном итоге, получить 5.0?
Редактировать: вот код в моем контроллере, модели и схеме. Я ничего не менял при обновлении рельсов ... и при сохранении массива идентификаторов предметов, таких как [14,12,5], он будет работать просто отлично. Это просто не позволит мне сохранять с идентификатором дубликата, как [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'