Redirecting to page from the model

How should I handle redirecting to pages from the model?

Basically I have credit cards that get processed in a model. If successful, I want the user to be redirected to a certain page, of unsuccessful I would like them redirected to a new page.

Obviously if I try and do this in the model, I get a undefined method `redirect_to' error. How should I handle this?

a method in my model:

def authorize_payment   if creditcard.valid?     response = gateway.authorize(100, creditcard, options)       print "(TEST) " if response.test?       if response.success?         puts "The transaction was successful! The authorization is #{response.authorization}"           redirect_to :controller => '/account', :action => 'index'           flash[:notice] = "Thanks for signing up!"       else         puts "The transaction was unsuccessful because #{response.message}"         redirect_to :controller => '/account/', :action => 'signup_unlimited'         flash[:notice] = "There was a problem with your credit card, please verify your information and try again."       end     else       puts "The credit card is invalid"     end   end end

glad i can help there buddy

if authorize_payment   redirect_to :action => "x" else   redirect_to :action => "y" end

You see, the model will throw false if it is not successful. You should never do logic in your model. NEVER

That logic should go in a controller.

The model should perform can perform the validation and authorization but the result should be returned to the controller to execute the business logic.

glad i can help there buddy

if authorize_payment   redirect_to :action => "x" else   redirect_to :action => "y" end

You see, the model will throw false if it is not successful. You sould never do logic in your model. NEVER

Also from my experience, not sure if it can be done another way, i would declare the model function as

self.authorze_payment

that way, if the model is called, "payment", from the controller you can call payment.authorize_payment. Inject that into the if statement i gave you earlier and voila, perfect execution

Thanks guys, alot of really useful information.

Everytime I think I am getting a handle on ruby, I realize how much I still have to learn haha =)