after_create: создать новую строку в БД - PullRequest
1 голос
/ 07 июня 2010

Привет, ребята, мне было интересно, может ли кто-нибудь помочь мне с проблемой, которая у меня есть, в основном я хотел бы иметь Account.create после получения уведомления PayPal. Существует простая модель корзины, которая соответствует line_items внутри корзины, поэтому add_account_to_market выглядеть так в псевдокоде

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

Я никогда не пытался сделать что-то подобное в Rails, и это не работает, я вырывал свои волосы всю ночь, пытаясь это исправить, надеюсь, кто-то может помочь или направить меня в правильном направлении. Спасибо:)

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 mark_cart_as_purchased метод работает нормально, просто у add_account_to_market у меня проблемы с.

Ответы [ 3 ]

1 голос
/ 07 июня 2010

Вы не вызываете save для новых учетных записей после их создания в add_account_to_market, поэтому они не будут сохраняться после возврата этого метода.

0 голосов
/ 07 июня 2010

Я закончил с этим

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

Большое спасибо за ваши ответы. В следующий раз, когда я вижу такую ​​проблему, я думаю, что плохо сплю на ней. : P

0 голосов
/ 07 июня 2010

Я думаю, что это должно быть:

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

И части for l.quantity там быть не должно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...