How to avoid variable been reset

I have a form that send an AJAX request to the controller, the action just instantiate an object so I could send data back to the view, but every time I hit the action the variable reset is there a way to avoid this behaviour.

This is my code inside my SaleController :

def getquote

@line_item = LineItem.new( params.require(:line_item).permit(:project_name, :pages, :quantity, :paper_id, :product_id, :plastic_id, :discount, :quote_before_discount, :duplex, :cost, :width, :height, :extras) )

@number = params[:index].match(/\d+/)[0]

@sale = Sale.new

@sale.line_items << @line_item

end

What I want is @sale not to be reset every time I hit the action, I thought about @sale ||= Sale.new but that didn’t work.

Any help would be appreciated.

Thanks.

I have a form that send an AJAX request to the controller, the action just instantiate an object so I could send data back to the view, but every time I hit the action the variable reset is there a way to avoid this behaviour.

This is my code inside my SaleController :

def getquote
    @line_item = LineItem.new( params.require(:line_item).permit(:project_name, :pages, :quantity, :paper_id, :product_id, :plastic_id, :discount, :quote_before_discount, :duplex, :cost, :width, :height, :extras) )
    @number = params[:index].match(/\d+/)[0]
    @sale = Sale.new
    @sale.line_items << @line_item
end

What I want is @sale not to be reset every time I hit the action, I thought about @sale ||= Sale.new but that didn't work.

Any help would be appreciated.

Browsers don't work this way, not without some sort of token to maintain state. If you have a session, and you use that to persist the sale across requests, then you can do this. I suspect though that your real problem is that you are trying to use one end-point for the :new, :create, and :update methods. That's not going to end well, or at the least, it's going to be a hairy bit of code. Try to re-think your flow to the point where it would work without Ajax, then layer Ajax on top of that. That's the way to success in any multi-step Web application of any kind.

Walter

Thanks Walter for the quick answer.

I kind of new to ajax, but what I’m trying to do is in a form when selecting data from the select drop down I would like to change with ajax some div that contain information about the sale, like price, quote etc…

The problem is when I try to get the info for the sale which is reset every time I change the state in the select drop down.

I don’t know if I have explain myself but I hope you could give a hint.

Thanks

Thanks Walter for the quick answer.

I kind of new to ajax, but what I'm trying to do is in a form when selecting data from the select drop down I would like to change with ajax some div that contain information about the sale, like price, quote etc....
The problem is when I try to get the info for the sale which is reset every time I change the state in the select drop down.

I don't know if I have explain myself but I hope you could give a hint.

What you need to do is the first time the user requests anything from the site, set a session cookie. Then make sure that you check that session cookie each subsequent time and re-hydrate their one and only request. Without knowing much about your application, I can't really give you specific answers, but try just putting a hidden field in your form with the user id, and store that in the session on the server site. Your method would begin with this sort of line:

  unless @sale = Sale.find_by_id session[:sale_id]
    @sale = Sale.create()
    session[:sale_id] = @sale.id
  end
  
But this gets you a bunch of empty sales in your database if nobody completes the order process. Another way to do this is to put the actual sale in the session until it gets persisted, and then store the id thereafter.

Walter

Thanks Walter that sounds pretty good I think I’m going to do that.

I will store the hole Sale in the session until it gets created.

Thanks.

Gustavo