2010-06-07 9 views
1

Hé les gars je me demandais si quelqu'un pouvait m'aider avec un problème im ayant, essentiellement id avoir comme Account.create après une notification PayPal est reçu, Il y a un modèle de panier simple qui correspond à line_items dans le panier afin add_account_to_market ressemblerait à ceci dans le code pseudoafter_create: créer une nouvelle ligne dans DB

def add_account_to_market 
    if status == "Completed" 
     find the line items(via cart_id) that correspond to the cart.id that just been paid 
     create an account with user_id set to the current carts user id 
    end 
end 

Ive jamais essayé de faire quelque chose comme ça dans Rails et son ne fonctionne pas, Ive été tirant mes cheveux toute la nuit en essayant de résoudre ce problème, je l'espère Quelqu'un peut m'aider ou me diriger dans la bonne direction. Merci :)

class PaymentNotification < ActiveRecord::Base 
    belongs_to :cart 
    serialize :params 
    after_create :mark_cart_as_purchased 
    after_create :add_account_to_market 

    private 

    def mark_cart_as_purchased 
    if status == "Completed" 
     cart.update_attribute(:purchased_at, Time.now) 
     cart.update_attribute(:paid, true) 
    end 
    end 

    def add_account_to_market 
    if status == "Completed" 
     l = LineItem.find(:all, :conditions => "cart_id = '#{cart.id}'") 
     for l.quantity 
     Account.new(:user_id => cart.user_id) 
     end 
    end 
    end 
end 

PS méthode mark_cart_as_purchased fonctionne bien, est juste le add_account_to_market im des problèmes avec.

Répondre

0

Je pense qu'il devrait être:

Account.create(:user_id => cart.user_id) 

Et la partie for l.quantity ne devrait pas être là.

1

Vous n'appelez pas save sur les nouveaux comptes après qu'ils ont été créés en add_account_to_market, ils ne vont donc pas persister après le retour de cette méthode.

0

J'ai fini avec cette

def add_account_to_market 
    if status == "Completed" 
     l = LineItem.find(:first, :conditions => "cart_id = '#{cart.id}'") 
     l.quantity.times do 
     Account.create(:user_id => cart.user_id) 
    end 
end 

Merci beaucoup pour vos réponses. La prochaine fois que je vois un problème comme celui-ci, je pense que je dors mal. : P

Questions connexes