Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL通过connection.execute插入Rails 4中的SELECT语句_Sql_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

SQL通过connection.execute插入Rails 4中的SELECT语句

SQL通过connection.execute插入Rails 4中的SELECT语句,sql,ruby-on-rails,ruby-on-rails-4,Sql,Ruby On Rails,Ruby On Rails 4,我正在控制器操作中运行上述代码,以便在表之间移动数据 终端显示以下正在执行的代码 ActiveRecord::Base.connection.execute("INSERT INTO order_items (cart_id, quantity, product_id) SELECT cart_id, quantity, product_id FROM cart_items WHERE cart_id = ? ", cart_id) 即使代码运行时没有引发任何错误,也不会将数据从CartIte

我正在控制器操作中运行上述代码,以便在表之间移动数据

终端显示以下正在执行的代码

ActiveRecord::Base.connection.execute("INSERT INTO order_items (cart_id, quantity, product_id) SELECT cart_id, quantity, product_id FROM cart_items WHERE cart_id = ? ", cart_id)
即使代码运行时没有引发任何错误,也不会将数据从CartItem模型移动到OrderItem模型。请让我知道我做错了什么

我正在根据以下代码示例对查询进行建模:

execute方法不允许这种带有问号和ruby变量的插值技术。此方法的第一个参数应该是完整的SQL查询。你应该这样做:

ActiveRecord::Base.connection.execute("INSERT INTO order_items (cart_id, quantity, product_id) SELECT cart_id, quantity, product_id FROM cart_items WHERE cart_id = ? ", cart_id)
但这是危险的,因为它允许SQL注入。在插入cart_id变量之前,您应该确保它只包含数字

实际上,这里不需要使用纯SQL查询,因为您可以使用ActiveRecord来实现您的目标:

"... WHERE cart_id = '#{cart_id}'"
或者您可以使用gem:


进行此更改后,我收到以下错误SQLException:没有这样的列:ugMc7c9DL5q8LgQlzn5fCw:在订单中插入商品购物车id、数量、产品id从购物车项目中选择购物车id、数量、产品id,其中购物车id=ugMc7c9DL5q8LgQlzn5fCwAdd在{cart_id}周围引用。我认为这可能会对该列产生问题。检查一下你的桌子,谢谢你的帮助。我还有一个问题。当我添加双引号时,它会在我的IDE中引发一个错误。当我添加单引号“{cart\u id}”时,我得到以下错误SQLite3::ConstraintException:非空约束失败:order\u items.created\u at:INSERT INTO order\u items cart\u id,quantity,product\u id选择cart\u id,quantity,来自购物车项目的产品id,其中购物车id='ugMc7c9DL5q8LgQlzn5fCw'您在其中一个订单项目列上没有NULL约束。这意味着此列不能为NULL,但在执行此插入操作时,不会为此列指定值。这可能是这三列中的一列或其他列。检查schema.rb并查看order_items中的哪一列具有null:false。
"... WHERE cart_id = '#{cart_id}'"
ActiveRecord::Base.transaction do
  CartItem.where(cart_id: cart_id).each do |cart_item|
    OrderItem.create(cart_id: cart_item.cart_id, quantity: cart_item.quantity, product_id: cart_item.product_id)
  end
end
cart_items = CartItem.where(cart_id: cart_id).pluck(:cart_id, :quantity, :product_id)
OrderItem.import([:cart_id, :quantity, :product_id], cart_items)