Reputation: 1560
Once a stripe charge goes through I want to create the order (based on previous model called order_preview)
My model for the cart looks like this:
has_one :order_preview
has_one :order
I understand you are supposed to either use @var.build_model as opposed to @var.model.build. Here is my code...
@cart.create_order(
:name => @order_preview.name,
:email => @order_preview.email,
:address => @order_preview.address,
:address2 => @order_preview.address2,
:city => @order_preview.city,
:state => @order_preview.state,
:zip => @order_preview.zip,
:country => @order_preview.country,
:permalink => @order_preview.permalink,
:shipping_type => @order_preview.shipping_type,
:shipping_price => @order_preview.shipping_price,
:grand_total => @amount,
:cart => @cart,
:items => @cart.line_items.to_a
)
@cart.save
redirect_to cart_order_path
This al seems to work, I've even used better errors to 'raise' an error to see that after the save, @cart.order does not show up nil. All the information above is listed. However, after the redirect, I get nil for the @cart.order
def show
@cart = current_cart
@order = @cart.order
@line_items = @order.items
end
@cart gives me whhat I want, but the @cart.order = nil. What Am I overlooking? It must be something simple...
note: build_order wasn't working so I tried create_order
Upvotes: 0
Views: 65
Reputation: 9173
Try:
@cart = current_cart
@order = @cart.build_order(
:name => @order_preview.name,
:email => @order_preview.email,
:address => @order_preview.address,
:address2 => @order_preview.address2,
:city => @order_preview.city,
:state => @order_preview.state,
:zip => @order_preview.zip,
:country => @order_preview.country,
:permalink => @order_preview.permalink,
:shipping_type => @order_preview.shipping_type,
:shipping_price => @order_preview.shipping_price,
:grand_total => @amount,
:items => @cart.line_items.to_a
)
if @order.save
redirect_to cart_order_path
else
render your_form
end
Your @cart.order is nil because it's not saving it in database. I have also removed :cart => @cart
because when you do @cart.build_order it'll automatically associate it with that cart
Upvotes: 1