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.