Ruby on rails Rails生成关联唯一性在不存在时插入

Ruby on rails Rails生成关联唯一性在不存在时插入,ruby-on-rails,activerecord,orm,Ruby On Rails,Activerecord,Orm,我在一个小应用程序上有一些简单的逻辑。 我有一个叫做“Oderne”(ordene.rb)的模型: 艾尔工作得很好,唱片看起来也不错: 问题是如何将此添加到我的“Ordenedetalle”模型中: 控制台显示: (0.3ms) BEGIN ↳ app/controllers/ordenes_controller.rb:32 OrdernesDetalle Exists (0.3ms) SELECT 1 AS one FROM `ordernes_detalles` WHERE

我在一个小应用程序上有一些简单的逻辑。 我有一个叫做“Oderne”(ordene.rb)的模型:

艾尔工作得很好,唱片看起来也不错:

问题是如何将此添加到我的“Ordenedetalle”模型中:

控制台显示:

(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

提前向您致意。

您是说您不能插入记录,因为OrdernesDetalle认为它在数据库中有重复的条目,但它没有?@order.save上会显示哪些错误消息?为了让你能看到他们,让它:如果@订单保存;放置@order.errors.full_消息;我只是意识到“查找或初始化”可以完成这项工作
@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
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