动作仅更新最后一个对象

潘乔

从最后两天开始,我尝试期待应用程序中发生了什么。这是我的问题:

我的模特:

class User
has_many :orders
---
class Order
belongs_to :user
has_and_belongs_to_many :contributors, class_name: 'User'

情况:用户可以创建订单,此订单的下一个可以添加具有以下内容的贡献者(其他用户)
<%= collection_check_boxes(:order, :contributor_ids, @prac, :id, :to_s) %>

之后,在OrdersController中的自定义操作中,我将得到以下内容:

@order.contributors.each do |u|
u.orders << @order
end

在这里,我想将此订单添加到贡献者(用户)订单列表中。不幸的是,这项工作仅适用于最后的贡献者(用户)。下面从我的控制台日志:

    Started PATCH "/orders/282/zatwierdz" for 127.0.0.1 at 2014-07-01 08:48:59 +0200

Processing by OrdersController#zatwierdz as HTML
  Parameters: {"authenticity_token"=>"hxWUnazKLoS9t8bVmOAMeIxdo/KYuO33bUeuQZYgeV
k=", "id"=>"282"}
  User Load (0.0ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 32  OR
DER BY "users"."id" ASC LIMIT 1
  Role Load (0.0ms)  SELECT  "roles".* FROM "roles"  WHERE "roles"."id" = ? LIMI
T 1  [["id", 4]]
  Order Load (0.0ms)  SELECT  "orders".* FROM "orders"  WHERE "orders"."id" = ?
 ORDER BY created_at DESC LIMIT 1  [["id", 282]]
  OrderItem Exists (0.0ms)  SELECT  1 AS one FROM "order_items"  WHERE "order_it
ems"."order_id" = ? LIMIT 1  [["order_id", 282]]
   (0.0ms)  begin transaction
  SQL (0.0ms)  UPDATE "orders" SET "status" = ?, "updated_at" = ? WHERE "orders"
."id" = 282  [["status", 1], ["updated_at", "2014-07-01 06:48:59.486472"]]
   (62.5ms)  commit transaction
  User Load (0.0ms)  SELECT "users".* FROM "users" INNER JOIN "orders_users" ON
"users"."id" = "orders_users"."user_id" WHERE "orders_users"."order_id" = ?  [["
order_id", 282]]
   (0.0ms)  begin transaction
   (0.0ms)  commit transaction
   (0.0ms)  begin transaction
  SQL (0.0ms)  UPDATE "orders" SET "updated_at" = ?, "user_id" = ? WHERE "orders
"."id" = 282  [["updated_at", "2014-07-01 06:48:59.564595"], ["user_id", 33]]
   (78.1ms)  commit transaction
   (0.0ms)  begin transaction
  SQL (0.0ms)  UPDATE "orders" SET "updated_at" = ?, "user_id" = ? WHERE "orders
"."id" = 282  [["updated_at", "2014-07-01 06:48:59.642719"], ["user_id", 35]]
   (78.1ms)  commit transaction
   (0.0ms)  begin transaction
  SQL (0.0ms)  UPDATE "orders" SET "updated_at" = ?, "user_id" = ? WHERE "orders
"."id" = 282  [["updated_at", "2014-07-01 06:48:59.720842"], ["user_id", 36]]
   (109.4ms)  commit transaction
   (0.0ms)  begin transaction
  SQL (0.0ms)  UPDATE "orders" SET "updated_at" = ?, "user_id" = ? WHERE "orders
"."id" = 282  [["updated_at", "2014-07-01 06:48:59.830215"], ["user_id", 37]]
   (78.1ms)  commit transaction
Redirected to http://localhost:3000/orders/282
Completed 302 Found in 437ms (ActiveRecord: 406.2ms)

我尝试将此操作与回调以及模型方法一起使用,但是什么也没发生。也许更好的办法是使用其他关联?Annny表示欢迎。谢谢。

马丁

通过做:

@order.contributors.each do |u|
  u.orders << @order
end

您正在将订单添加到user.orders关系中,该关系定义为一个(用户)一对多(“订单”)。User类上的“ has_many”订单仅是Order类上“ belongs_to”用户的另一侧。因此,是的,根据您的模型,一个订单只有一个用户和一个用户。

现在,如果您希望能够从用户端导航has_and_belongs_to_many关系,则也需要在其中进行定义

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在多次更新对象时,仅更新最后一个对象。我希望执行所有更新操作

OpenGL将仅更新最后一个顶点数组对象

对象数组的 for 循环仅考虑最后一个对象

对象数组仅包含最后一个

PHP仅返回最后一个JSON对象

对象变量仅显示最后一个值

ReactJS,仅最后一个商品ID更新

表循环仅更新最后一个值

AJAX仅更新最后一个项目ID

Parse.com将对象保存在循环中,仅保存最后一个对象

仅显示最后一个元素

Vuex-如何通过一个更新突变/动作访问不同的状态对象?

单击最后一个按钮后延迟动作

递归——如何只在最后做一个动作

Android-使用最后一个动作与Intent分享

Web Service方法仅读取列表中的最后一个对象

Javascript仅将for循环中的最后一个条目推送到对象

如何仅修复Java ArrayList中重复的循环中的最后一个对象

JSON拼合器仅将JSON中的最后一个对象返回到拼合形式

为什么我的程序仅打印出数组的最后一个对象值?

仅返回Django REST Framework中的最后一个对象

通过for循环增强数组仅保留最后一个对象?

JavaScript [Konva]:数组多个事件仅返回最后一个对象

Java中的ArrayList仅打印列表中的最后一个对象

JSON仅打印数组中的最后一个对象

骨干集合视图仅呈现集合中的最后一个对象

使用命令仅更改最后一个对象的属性的Delphi

RecyclerView在删除对象后更新视图,最后一个对象除外

Android处理程序仅使用最后一个setText()更新TextView