Adding a 'coupon-like' feature to a checkout process?

I am not sure how to go about this. So far I only have my coupon model
built.

Basically what I am trying to achieve is simply being able to 'use' a
coupon that is created, to knock the price down on the total of the
model that is handling the checkout.

I was wondering if the 'model that is handling the checkout' even
needs to be related to the coupon. I was thinking I could simply do
@coupon = Coupon.new

Another thing is, I am not sure how to set up the form functionality
of being able to update something on the screen. Maybe ajax?

Imagine something like this on the browser:

Buy so and so : $15

Total: $15

(Form to enter billing address)

(coupon field) (update) <--- how would this work? Basically have the
coupon if valid, change Total.

Reset / Checkout

I tried creating a method like this in the coupon model but I am
coding pretty blind - so let me know if there is a better way to
tackle this.

[code=ruby] def discount
    coupon = Coupon.find(params[:code])
    if coupon.active?
      total = total * coupon / 100
    else
      flash[:notice] = "Invalid Coupon"
    end
  end[/code]
How would I even run this? Could I do it through the form? <%=
text_field :coupon, :discount %>

Thanks for the help,
Daniel

Wai,

hmm I tried this out - but I am not sure I am doing it right. Mainly
because I am trying to integrate this into the membership/upgrade view
yet the coupon is related to the coupon/validate (controller,action).

I tried to plug it in to that form snippet you gave me, but it doesn't
work. Any guidance towards this?

Wai,

Sorry to bug you again. But I'm not sure I want to do this with ajax
at the moment. Mainly because the project is using jquery as well, so
how would I do this with only forms? Would it have to be two forms in
a view?