RoR: доступ к странице, сгенерированной в обратном вызове after_save - PullRequest
0 голосов
/ 11 октября 2011

У меня проблема с пониманием обратного вызова after_save rails. Вот фрагмент из моей модели:

  after_save :log_creation

  private 

    def log_creation
      logger.info "RECEIVED => #{ self.name } - #{ self.value } - #{ self.id }"
      path_to_url = url_for({ :host => "localhost:8080", :action=>"show", :controller=>"testing", :format =>"pdf", :id => self })
      logger.info path_to_url
      file = open(path_to_url, "r").read
      logger.info file
    end

В журнале разработки я получаю ожидаемую информацию для первых двух logger.info. Третий я не получаю, потому что я получаю исключение 404 (ActiveRecord :: RecordNotFound).

Итак, что я делаю не так?

Генерация PDF работает нормально (с использованием PDFkit), если я комментирую строку after_save и пытаюсь получить доступ к URL-адресу, все в порядке, но когда я пытаюсь получить доступ к нему после after_save, он не работает, как я ожидал.

Все это для отправки электронного письма (с почтовой программой) с приложенным PDF-файлом. Было бы скачать PDF (через контролируемый), а затем отправить его.

1 Ответ

1 голос
/ 11 октября 2011

Я думаю, что проблема связана с транзакциями.Новая модель была сохранена, но транзакция еще не завершена.Попробуйте after_commit вместо after_save.См. документацию по обратным вызовам для получения подробной информации о всех различных обратных вызовах.

...