Keaja
2008-Feb-29 17:44 UTC
Adding Logic to first rails app in case of error from 2nd rails app
Hi All, I have been following the latest advanced rails recipe tutorial, "handing recurring credit card payments" and its excellent. The code works great if there are no problems with the user creation, credit card creation or purchase creation. The problem is I want to add some validation and logic inc ase something happens along the way. Right now if the credit card or purchase create fails on the card_server, my rails app returns the following error, otherwise the creation works great. How can I clean up my code to handle errors from my card_server better? Thanks! You have a nil object when you didn''t expect it! The error occurred while evaluating nil.status My Rails App Controller Method def signup_unlimited_create @user = User.new(params[:user]) @user.account_type = "Unlimited" @user.login = @user.email #create credit_card entry if @user.save # store credit card @cc = CreditCard.create(:first_name => @user.first_name, :last_name => @user.last_name, :number => params[:card_number], :month => params[:card_expiration_month], :year => params[:card_expiration_year], :brand => params[:card_type]) else redirect_to :controller => ''account'', :action => ''index'' end if @cc.status = "created" @user.credit_card_id = @cc.id #purchase credit card @pp = Purchase.create( :amount => 911.95, :description => "Initial Payment", :order => "1100030", :credit_card_id => @cc.id) self.current_user = @user if @pp.status = "created" #create invoice @invoice = Invoice.new(params[:invoice]) @invoice.due_date = Time.now + 30.days @invoice.generated_date = Time.now @invoice.status = "Due" @invoice.user_id = @user.id @invoice.save redirect_to :controller => ''account'', :action => ''index'' else redirect_to :controller => ''account'', :action => ''signup_unlimited'' end end end My Rails App Card Server Controller''s look something like this class PurchasesController < ApplicationController def create @purchase = Purchase.new(params[:purchase]) respond_to do |format| if @purchase.save format.xml { render :xml => @purchase, :status => :created, :location => @purchase } else format.xml { render :xml => @purchase.errors, :status => :unprocessable_entity } end end end end class CreditCardsController < ApplicationController def create @credit_card = CreditCard.new(params[:credit_card]) respond_to do |format| if @credit_card.save format.xml { render :xml => @credit_card, :status => :created, :location => @credit_card } else format.xml { render :xml => @credit_card.errors, :status => :unprocessable_entity } end end end end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
neharohan.chopra-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2008-Feb-29 18:57 UTC
Re: Adding Logic to first rails app in case of error from 2nd rails app
U can put all the database transactions in a transaction block. begin database transactions of creating any records and all rescue handle the errors gracefully over here end Also in your code you should always check for the variable to be not nil, before accessing any information from it. Hope it helps. On Feb 29, 12:44 pm, Keaja <jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi All, > > I have been following the latest advanced rails recipe tutorial, > "handing recurring credit card payments" and its excellent. The code > works great if there are no problems with the user creation, credit > card creation or purchase creation. The problem is I want to add some > validation and logic inc ase something happens along the way. Right > now if the credit card or purchase create fails on the card_server, my > rails app returns the following error, otherwise the creation works > great. How can I clean up my code to handle errors from my card_server > better? > > Thanks! > > You have a nil object when you didn''t expect it! > The error occurred while evaluating nil.status> > My Rails App Controller Method > def signup_unlimited_create > @user = User.new(params[:user]) > @user.account_type = "Unlimited" > @user.login = @user.email > > #create credit_card entry > if @user.save > # store credit card > @cc = CreditCard.create(:first_name => @user.first_name, > :last_name => @user.last_name, > :number => params[:card_number], > :month => params[:card_expiration_month], > :year => params[:card_expiration_year], > :brand => params[:card_type]) > else > redirect_to :controller => ''account'', :action => ''index'' > end > > if @cc.status = "created" > @user.credit_card_id = @cc.id > #purchase credit card > @pp = Purchase.create( > :amount => 911.95, > :description => "Initial Payment", > :order => "1100030", > :credit_card_id => @cc.id) > self.current_user = @user > > if @pp.status = "created" > #create invoice > @invoice = Invoice.new(params[:invoice]) > @invoice.due_date = Time.now + 30.days > @invoice.generated_date = Time.now > @invoice.status = "Due" > @invoice.user_id = @user.id > @invoice.save > > redirect_to :controller => ''account'', :action => ''index'' > else > redirect_to :controller => ''account'', :action => > ''signup_unlimited'' > end > end > end > > My Rails App Card Server Controller''s look something like this > > class PurchasesController < ApplicationController > > def create > @purchase = Purchase.new(params[:purchase]) > > respond_to do |format| > if @purchase.save > format.xml { render :xml => @purchase, > :status => :created, > :location => @purchase } > else > format.xml { render :xml => @purchase.errors, > :status => :unprocessable_entity } > end > end > end > end > > class CreditCardsController < ApplicationController > > def create > @credit_card = CreditCard.new(params[:credit_card]) > > respond_to do |format| > if @credit_card.save > format.xml { render :xml => @credit_card, > :status => :created, > :location => @credit_card } > else > format.xml { render :xml => @credit_card.errors, > :status => :unprocessable_entity } > end > end > end > end--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Jason M. Winn
2008-Mar-03 16:30 UTC
Re: Adding Logic to first rails app in case of error from 2nd rails app
Could I use rescue for the following scenario? Credit Card is created if the user is saved, like below. The problem is, the user is still getting saved even if the credit card is not being saved. Would I use rescue in a case like that? Thanks! def signup_unlimited @user = User.new end def signup_unlimited_create @user = User.new(params[:user]) @user.account_type = "Unlimited" @user.login = @user.email #create credit_card entry if @user.save self.current_user = @user @cc = CreditCard.create(:first_name => @user.first_name, :last_name => @user.last_name, :number => params[:card_number], :month => params[:card_expiration_month], :year => params[:card_expiration_year], :brand => params[:card_type]) @user.credit_card_id = @cc.id if @user.credit_card_id == nil flash[:notice] = "problem creating the credit card" render :action => ''signup_unlimited'' end if @user.credit_card_id != nil flash[:notice] = "congrats, you created an account and we charged your card" render :action => ''index'' end else flash[:notice] = "problem creating the user" render :action => ''signup_unlimited'' end end On Feb 29, 2008, at 10:57 AM, neharohan.chopra-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote:> > U can put all the database transactions in a transaction block. > begin > database transactions of creating any records and all > rescue > handle the errors gracefully over here > end > > Also in your code you should always check for the variable to be not > nil, before accessing any information from it. > > Hope it helps. > > > > On Feb 29, 12:44 pm, Keaja <jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> Hi All, >> >> I have been following the latest advanced rails recipe tutorial, >> "handing recurring credit card payments" and its excellent. The code >> works great if there are no problems with the user creation, credit >> card creation or purchase creation. The problem is I want to add some >> validation and logic inc ase something happens along the way. Right >> now if the credit card or purchase create fails on the >> card_server, my >> rails app returns the following error, otherwise the creation works >> great. How can I clean up my code to handle errors from my >> card_server >> better? >> >> Thanks! >> >> You have a nil object when you didn''t expect it! >> The error occurred while evaluating nil.status>> >> My Rails App Controller Method >> def signup_unlimited_create >> @user = User.new(params[:user]) >> @user.account_type = "Unlimited" >> @user.login = @user.email >> >> #create credit_card entry >> if @user.save >> # store credit card >> @cc = CreditCard.create(:first_name => @user.first_name, >> :last_name => @user.last_name, >> :number => params[:card_number], >> :month => params[:card_expiration_month], >> :year => params[:card_expiration_year], >> :brand => params[:card_type]) >> else >> redirect_to :controller => ''account'', :action => ''index'' >> end >> >> if @cc.status = "created" >> @user.credit_card_id = @cc.id >> #purchase credit card >> @pp = Purchase.create( >> :amount => 911.95, >> :description => "Initial Payment", >> :order => "1100030", >> :credit_card_id => @cc.id) >> self.current_user = @user >> >> if @pp.status = "created" >> #create invoice >> @invoice = Invoice.new(params[:invoice]) >> @invoice.due_date = Time.now + 30.days >> @invoice.generated_date = Time.now >> @invoice.status = "Due" >> @invoice.user_id = @user.id >> @invoice.save >> >> redirect_to :controller => ''account'', :action => ''index'' >> else >> redirect_to :controller => ''account'', :action => >> ''signup_unlimited'' >> end >> end >> end >> >> My Rails App Card Server Controller''s look something like this >> >> class PurchasesController < ApplicationController >> >> def create >> @purchase = Purchase.new(params[:purchase]) >> >> respond_to do |format| >> if @purchase.save >> format.xml { render :xml => @purchase, >> :status => :created, >> :location => @purchase } >> else >> format.xml { render :xml => @purchase.errors, >> :status => :unprocessable_entity } >> end >> end >> end >> end >> >> class CreditCardsController < ApplicationController >> >> def create >> @credit_card = CreditCard.new(params[:credit_card]) >> >> respond_to do |format| >> if @credit_card.save >> format.xml { render :xml => @credit_card, >> :status => :created, >> :location => @credit_card } >> else >> format.xml { render :xml => @credit_card.errors, >> :status => :unprocessable_entity } >> end >> end >> end >> end > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Keaja
2008-Mar-03 16:31 UTC
Re: Adding Logic to first rails app in case of error from 2nd rails app
Pastie: http://pastie.caboo.se/160574 On Mar 3, 8:30 am, "Jason M. Winn" <jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Could I use rescue for the following scenario? > > Credit Card is created if the user is saved, like below. The problem > is, the user is still getting saved even if the credit card is not > being saved. Would I use rescue in a case like that? > > Thanks! > > def signup_unlimited > @user = User.new > end > > def signup_unlimited_create > @user = User.new(params[:user]) > @user.account_type = "Unlimited" > @user.login = @user.email > #create credit_card entry > if @user.save > self.current_user = @user > @cc = CreditCard.create(:first_name => @user.first_name, > :last_name => @user.last_name, > :number => params[:card_number], > :month => params[:card_expiration_month], > :year => params[:card_expiration_year], > :brand => params[:card_type]) > @user.credit_card_id = @cc.id > > if @user.credit_card_id == nil > flash[:notice] = "problem creating the credit card" > render :action => ''signup_unlimited'' > end > > if @user.credit_card_id != nil > flash[:notice] = "congrats, you created an account and we > charged your card" > render :action => ''index'' > end > > else > flash[:notice] = "problem creating the user" > render :action => ''signup_unlimited'' > end > end > > On Feb 29, 2008, at 10:57 AM, neharohan.cho...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote: > > > > > U can put all the database transactions in a transaction block. > > begin > > database transactions of creating any records and all > > rescue > > handle the errors gracefully over here > > end > > > Also in your code you should always check for the variable to be not > > nil, before accessing any information from it. > > > Hope it helps. > > > On Feb 29, 12:44 pm, Keaja <jasonmw...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > >> Hi All, > > >> I have been following the latest advanced rails recipe tutorial, > >> "handing recurring credit card payments" and its excellent. The code > >> works great if there are no problems with the user creation, credit > >> card creation or purchase creation. The problem is I want to add some > >> validation and logic inc ase something happens along the way. Right > >> now if the credit card or purchase create fails on the > >> card_server, my > >> rails app returns the following error, otherwise the creation works > >> great. How can I clean up my code to handle errors from my > >> card_server > >> better? > > >> Thanks! > > >> You have a nil object when you didn''t expect it! > >> The error occurred while evaluating nil.status> > >> My Rails App Controller Method > >> def signup_unlimited_create > >> @user = User.new(params[:user]) > >> @user.account_type = "Unlimited" > >> @user.login = @user.email > > >> #create credit_card entry > >> if @user.save > >> # store credit card > >> @cc = CreditCard.create(:first_name => @user.first_name, > >> :last_name => @user.last_name, > >> :number => params[:card_number], > >> :month => params[:card_expiration_month], > >> :year => params[:card_expiration_year], > >> :brand => params[:card_type]) > >> else > >> redirect_to :controller => ''account'', :action => ''index'' > >> end > > >> if @cc.status = "created" > >> @user.credit_card_id = @cc.id > >> #purchase credit card > >> @pp = Purchase.create( > >> :amount => 911.95, > >> :description => "Initial Payment", > >> :order => "1100030", > >> :credit_card_id => @cc.id) > >> self.current_user = @user > > >> if @pp.status = "created" > >> #create invoice > >> @invoice = Invoice.new(params[:invoice]) > >> @invoice.due_date = Time.now + 30.days > >> @invoice.generated_date = Time.now > >> @invoice.status = "Due" > >> @invoice.user_id = @user.id > >> @invoice.save > > >> redirect_to :controller => ''account'', :action => ''index'' > >> else > >> redirect_to :controller => ''account'', :action => > >> ''signup_unlimited'' > >> end > >> end > >> end > > >> My Rails App Card Server Controller''s look something like this > > >> class PurchasesController < ApplicationController > > >> def create > >> @purchase = Purchase.new(params[:purchase]) > > >> respond_to do |format| > >> if @purchase.save > >> format.xml { render :xml => @purchase, > >> :status => :created, > >> :location => @purchase } > >> else > >> format.xml { render :xml => @purchase.errors, > >> :status => :unprocessable_entity } > >> end > >> end > >> end > >> end > > >> class CreditCardsController < ApplicationController > > >> def create > >> @credit_card = CreditCard.new(params[:credit_card]) > > >> respond_to do |format| > >> if @credit_card.save > >> format.xml { render :xml => @credit_card, > >> :status => :created, > >> :location => @credit_card } > >> else > >> format.xml { render :xml => @credit_card.errors, > >> :status => :unprocessable_entity } > >> end > >> end > >> end > >> end--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---