Peege151
Peege151

Reputation: 1560

Has_One Association not Creating

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

Answers (1)

Mandeep
Mandeep

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

Related Questions