Это возможно, сэр.Секрет в accepts_nested_attributes_for
:
class Cart
include Mongoid::Document
embeds_many :cart_items
attr_accessible ...
accepts_nested_attributes_for :cart_items
attr_accessible :cart_items_attributes
set_callback(:update, :before) do |document|
document.calculate_prices
end
protected
def calculate_prices
# Set some fields
end
end
class CartItem
include Mongoid::Document
embedded_in :cart
attr_accessible ...
end
В представлении:
= form_for @cart do |f|
= f.fields_for :cart_items do |n|
= render "cart_item", :n => n, :cart_item => n.object
С этим вы можете удалять товары из корзины, обновлять количество и пересчитывать цены в одной корзине update
.