2014-07-01 1 views
0

지난 2 일 동안 내 앱에서 무슨 일이 벌어 지는지 예상 해 봅니다. 이것은 내 문제입니다 :작업 업데이트 만 마지막 개체

내 모델 :

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 

여기 iw 개미는 기여자 (사용자)의 목록에이 순서를 추가합니다. 불행히도이 작업은 마지막 참여자 (사용자)에게만 해당됩니다. 내 콘솔의 로그보다 아래 :

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) 

이 작업을 콜백 및 모델 메서드에서 사용해 보지만 아무 일도 일어나지 않았습니다. 다른 협회를 사용하는 것이 더 나은가? Anny sugestions가 환영합니다. Thx 도움. 이렇게함으로써

답변

0

:

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

당신은 하나 (사용자)에 사용자가 많은 (주문)로 정의 user.orders 관계에 주문을 추가한다. User 클래스의 "has_many"주문은 Order 클래스의 "belongs_to"사용자의 다른 쪽입니다. 그래서 예, 귀하의 모델에 따라, 주문은 단 하나의 사용자를가집니다.

이제 사용자 측에서 has_and_belongs_to_many 관계를 탐색 할 수있게하려면 define it there too이 필요합니다.

+0

지금은 분명합니다. :) 도움을 주셔서 감사합니다. – Panczo

+0

언제나 명백합니다. 천만에요. – Martin

관련 문제