Как можно синхронизировать несколько экземпляров ActiveRecord одной и той же строки базы данных? - PullRequest
2 голосов
/ 17 декабря 2009

В моем приложении Rails у меня есть эти модели

Order has_many OrderItem
OrderItem belongs_to Order

Мой контроллер имеет этот (псевдо) код:

#before_filter
@cart = Order.find(session[:cart_id])

#Action: update_item
item = OrderItem.find(params[:item_id] 
#The order, item belongs to, is in fact @cart, i.e. @cart.id == item.order.id
item.price = 999.99
item.order.total += item.price

После последней строки объект @cart все еще имеет старое значение total.

Как лучше всего решать такие ситуации в Rails? Я думаю, что самый простой способ - это просто перезагрузить @cart, но, возможно, есть более похожий на Rails способ.

1 Ответ

3 голосов
/ 17 декабря 2009

Вы сохранили товар до получения суммы от @ cart

item = OrderItem.find(params[:item_id])
item.price = 999.99
item.save!

А получить сумму от заказа товара можно:

total_price = item.order.order_items.sum(&:price)

Я предполагаю, что отношения между Order и OrderItem равны

class Order
has_many :order_items
...
end

class OrderItem
belongs_to :order
...
end

@cart можно перезагрузить следующим образом

@cart.reload

ИЛИ, чтобы получить обновленную сумму

@cart.reload.order_items.sum(&:price)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...