У меня есть простая логика в небольшом приложении.
У меня есть эта модель под названием "Oderne" (ordene.rb):
class Ordene < ApplicationRecord
has_many :ordernes_detalles
end
И деталь называется (ordernes_detalle.rb):
class OrdernesDetalle < ApplicationRecord
belongs_to :ordene
belongs_to :refaccione
end
Когда я создаю / обновляю ассоциацию записей, она выглядит следующим образом:
@order = Ordene.new
@order.folio = SecureRandom.hex(4)
@order.description = params[:description]
@order.user_id = 1
@order.cliente_id = params[:cliente_id]
@order.reporte_id = params[:reporte_id]
params[:refaccione_id].each do |refaccion|
@order.ordernes_detalles.build(
:refaccione => Refaccione.find(refaccion),
:tipo => 1
)
end
if @order.save
flash[:notice] = 'Orden creada correctamente'
redirect_to action: 'index'
else
flash[:alert] = 'Error al crear la orden'
redirect_to action: 'index'
end
Ал отлично работает, а записи выглядят просто хорошо:
Вопрос в том, чтобы добавить это в мою модель "OrdenesDetalle":
class OrdernesDetalle < ApplicationRecord
belongs_to :ordene
belongs_to :refaccione
validates_uniqueness_of :ordene, scope: :refaccione
end
Поэтому, когда я хочу обновить запись:
@order = Ordene.find(1)
params[:refaccione_id].each do |refaccion|
@order.ordernes_detalles.build(
:refaccione => Refaccione.find(refaccion),
:tipo => 1
)
end
@order.save
Консоль показывает:
(0.3ms) BEGIN
↳ app/controllers/ordenes_controller.rb:32
OrdernesDetalle Exists (0.3ms) SELECT 1 AS one FROM `ordernes_detalles` WHERE `ordernes_detalles`.`ordene_id` = 1 AND `ordernes_detalles`.`refaccione_id` = 1 LIMIT 1
↳ app/controllers/ordenes_controller.rb:32
OrdernesDetalle Exists (0.2ms) SELECT 1 AS one FROM `ordernes_detalles` WHERE `ordernes_detalles`.`ordene_id` = 1 AND `ordernes_detalles`.`refaccione_id` = 2 LIMIT 1
↳ app/controllers/ordenes_controller.rb:32
OrdernesDetalle Exists (0.2ms) SELECT 1 AS one FROM `ordernes_detalles` WHERE `ordernes_detalles`.`ordene_id` = 1 AND `ordernes_detalles`.`refaccione_id` = 3 LIMIT 1
↳ app/controllers/ordenes_controller.rb:32
(0.1ms) ROLLBACK
Запрос, который показывает, очевидно, не существует, но не вставляет запись, как я могу вставить эту запись, все еще избегая повторяющихся записей:
SELECT 1 AS one FROM `ordernes_detalles` WHERE `ordernes_detalles`.`ordene_id` = 1 AND `ordernes_detalles`.`refaccione_id` = 3 LIMIT 1
С уважением.