Hello! I''m trying to integrate PayPal into my (first) Rails app. I''ve been looking at RailsCast #142, http://railscasts.com/episodes/142-paypal-notifications. But I don''t get it to work. My app isn''t a normal e-commerce site, it''s a buy and sell site. Every ad has a ''published'' boolean, which I want to set to true if the user completes the payment process. My code looks like this. Order model: class Order < ActiveRecord::Base belongs_to :ad def paypal_url(return_url, notify_url) values = { :business => ''anders_1291665108_biz@my_mail.se'', :cmd => ''_xclick'', :currency_code => "SEK", :upload => 1, :return => return_url, :invoice => id, :amount => 15, :item_name => "Ad", :quantity => 1, :lc => "SE", :notify_url => notify_url } "https://www.sandbox.paypal.com/cgi-bin/webscr?" + values.to_query end end My Payment Notifications Controller: class PaymentNotificationsController < ApplicationController protect_from_forgery :except => [:create] def create PaymentNotification.create!(:params => params, :ad_id => params[:invoice], :status => params[:payment_status], :transaction_id => params[:txn_id]) render :nothing => true end end And my Payment Notification model (where I think the problem is): class PaymentNotification < ActiveRecord::Base belongs_to :ad serialize :params after_create :mark_ad_as_purchased def mark_ad_as_purchased if status == "Completed" ad.update_attribute(:published => true) end end end I get an error that says: NoMethodError in Payment notificationsController#create You have a nil object when you didn''t expect it! You might have expected an instance of ActiveRecord::Base. The error occurred while evaluating nil.update_attribute Any help or tips would be appreciated! Thanks Anders -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 7 December 2010 21:03, Anders_P <anders-TlBSdMGKk75YFVMCzM9+FrNAH6kLmebB@public.gmane.org> wrote:> Hello! > > I''m trying to integrate PayPal into my (first) Rails app. I''ve been > looking at RailsCast #142, http://railscasts.com/episodes/142-paypal-notifications. > But I don''t get it to work. My app isn''t a normal e-commerce site, > it''s a buy and sell site. Every ad has a ''published'' boolean, which I > want to set to true if the user completes the payment process. My code > looks like this. > > Order model: > > class Order < ActiveRecord::Base > belongs_to :ad > > def paypal_url(return_url, notify_url) > values = { > :business => ''anders_1291665108_biz@my_mail.se'', > :cmd => ''_xclick'', > :currency_code => "SEK", > :upload => 1, > :return => return_url, > :invoice => id, > :amount => 15, > :item_name => "Ad", > :quantity => 1, > :lc => "SE", > :notify_url => notify_url > } > "https://www.sandbox.paypal.com/cgi-bin/webscr?" + > values.to_query > end > end > > My Payment Notifications Controller: > > class PaymentNotificationsController < ApplicationController > protect_from_forgery :except => [:create] > > def create > PaymentNotification.create!(:params => params, :ad_id => > params[:invoice], :status => params[:payment_status], > :transaction_id => params[:txn_id]) > render :nothing => true > end > end > > And my Payment Notification model (where I think the problem is): > > class PaymentNotification < ActiveRecord::Base > belongs_to :ad > serialize :params > after_create :mark_ad_as_purchased > > def mark_ad_as_purchased > if status == "Completed" > ad.update_attribute(:published => true)Assuming this is where it is failing, you are updating the attribute of ad, but the error says ad is nil. I assume this is supposed to be setup from params[:invoice] above. I suggest you use ruby-debug to break into your code here and see what is going on. If you do not know about ruby-debug have a look at the Rails Guide on debugging. Also you could look in the log to see the query creating the notification record to check that ad_id is set correctly. Colin> end > end > end > > I get an error that says: > > NoMethodError in Payment notificationsController#create > > You have a nil object when you didn''t expect it! > You might have expected an instance of ActiveRecord::Base. > The error occurred while evaluating nil.update_attribute-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks Colin! You found the root of my problem, the invoice/id was wrong. And thanks for the tips regarding Ruby-debug. Still has a lot to learn. :D // Anders On 7 Dec, 22:35, Colin Law <clan...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> On 7 December 2010 21:03, Anders_P <and...-TlBSdMGKk75YFVMCzM9+FrNAH6kLmebB@public.gmane.org> wrote: > > > > > > > Hello! > > > I''m trying to integrate PayPal into my (first) Rails app. I''ve been > > looking at RailsCast #142,http://railscasts.com/episodes/142-paypal-notifications. > > But I don''t get it to work. My app isn''t a normal e-commerce site, > > it''s a buy and sell site. Every ad has a ''published'' boolean, which I > > want to set to true if the user completes the payment process. My code > > looks like this. > > > Order model: > > > class Order < ActiveRecord::Base > > belongs_to :ad > > > def paypal_url(return_url, notify_url) > > values = { > > :business => ''anders_1291665108_biz@my_mail.se'', > > :cmd => ''_xclick'', > > :currency_code => "SEK", > > :upload => 1, > > :return => return_url, > > :invoice => id, > > :amount => 15, > > :item_name => "Ad", > > :quantity => 1, > > :lc => "SE", > > :notify_url => notify_url > > } > > "https://www.sandbox.paypal.com/cgi-bin/webscr?" + > > values.to_query > > end > > end > > > My Payment Notifications Controller: > > > class PaymentNotificationsController < ApplicationController > > protect_from_forgery :except => [:create] > > > def create > > PaymentNotification.create!(:params => params, :ad_id => > > params[:invoice], :status => params[:payment_status], > > :transaction_id => params[:txn_id]) > > render :nothing => true > > end > > end > > > And my Payment Notification model (where I think the problem is): > > > class PaymentNotification < ActiveRecord::Base > > belongs_to :ad > > serialize :params > > after_create :mark_ad_as_purchased > > > def mark_ad_as_purchased > > if status == "Completed" > > ad.update_attribute(:published => true) > > Assuming this is where it is failing, you are updating the attribute > of ad, but the error says ad is nil. I assume this is supposed to be > setup from params[:invoice] above. I suggest you use ruby-debug to > break into your code here and see what is going on. If you do not > know about ruby-debug have a look at the Rails Guide on debugging. > Also you could look in the log to see the query creating the > notification record to check that ad_id is set correctly. > > Colin > > > > > end > > end > > end > > > I get an error that says: > > > NoMethodError in Payment notificationsController#create > > > You have a nil object when you didn''t expect it! > > You might have expected an instance of ActiveRecord::Base. > > The error occurred while evaluating nil.update_attribute-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Anders_P wrote in post #967140:> Thanks Colin! > > You found the root of my problem, the invoice/id was wrong. And thanks > for the tips regarding Ruby-debug. Still has a lot to learn. :D > > // AndersHi Anders, I''m having this same problem. Could you tell me what exactly was wrong with your invoice/id setup? Thanks, -Max -- Posted via http://www.ruby-forum.com/. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.