проблема has_and_belongs_to_many и after_save - PullRequest
0 голосов
/ 31 мая 2011

У меня есть две модели

class Payment < ActiveRecord::Base
  has_and_belongs_to_many :invoices

  after_save :update_invoices_state

  def update_invoices_state
    self.invoices.each{|i| i.update_state }
  end
end

class Invoice < ActiveRecord::Base
  has_and_belongs_to_many :payments

  def pending_value
    paid_value = Money.new(0,self.currency)
    self.payments.each{|payment| paid_value += payment.value}
    self.value - paid_value
  end

  def update_state
    if self.pending_value.cents >= 0
      if self.due_on >= Time.zone.today
        new_state = :past_due_date
      else
        new_state = :pending
      end
    else
      new_state = :paid
    end
    self.update_attribute :state, new_state
  end
end

Я отлаживал это и обнаружил, что при запуске invoice.update_state self.payments пусто. Похоже, HABTM еще не обновлен.

Как я могу решить это?

1 Ответ

2 голосов
/ 31 мая 2011

Я считаю, что HABTM в основном был заменен has_many: through.

Вы бы создали модель соединения, что-то вроде "InvoicePayment" (или что-то еще креативное)

class Payment < ActiveRecord::Base
    has_many :invoice_payments
    has_many :invoices, :through => :invoicepayments
end

class InvoicePayment < ActiveRecord::Base
    belongs_to :invoice
    belongs_to :payment
end

class Invoice < ActiveRecord::Base
    has_many :invoice_payments
    has_many :payments, :through => :invoice_payments 
end

Это должноисправить вашу проблему.

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