Ruby on rails: освежающие результаты от foo.bars - PullRequest
0 голосов
/ 25 февраля 2011

Так вот что у меня есть, это функция в моделях / product.rb

def get_current_offer_price()
    if self.prices.blank?
      p = Price.new()
      p.product = self
      p.value = (Amazon.get_price_by_asin(self.code)).to_d / 100
      p.save
    end
    self.prices.last.value
  end

Интересно, что при первом запуске этой системы происходит сбой системы, но если я обновляю страницу и каждый другой раз, это работает отлично. Кажется, что self.prices не обновляется между p.save и когда я вызываю его в следующий раз, но позже это выясняется. Можно ли принудительно обновить страницу до завершения загрузки страницы?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011
  def get_current_offer_price
    if self.prices.blank?
      self.prices.create :value => (Amazon.get_price_by_asin(self.code)).to_d / 100
    end
    self.prices.last.value
  end

Обычно хорошей идеей является использование прокси-сервера ассоциации для создания связанных объектов. Это позволяет избежать вашей проблемы, которая вызвана тем, что прокси-сервер ассоциации кеширует цены. Вы создаете новый объект, но кэшированное значение не забирает его.

Использование ассоциации для создания связанного объекта делает недействительным кеш и заставляет его извлекать новый. Вам также не нужно вручную назначать какие-либо первичные ключи, это просто работает.

0 голосов
/ 25 февраля 2011

Я бы изменил ваш метод и использовал бы create метод, примерно такой:

def get_current_offer_price()
    if self.prices.blank?
      product_id = self.id
      product_value = (Amazon.get_price_by_asin(self.code)).to_d / 100
      Price.create(:product_id => product_id, :product_value => product_value)
    end
    self.prices.last.value
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...