2011-10-11 29 views
0

我在理解after_save rails回調時遇到了問題。有我的模型片段:RoR:訪問在after_save回調中生成的頁面

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(通過受控)然後發送。

+0

我不明白什麼是工作或不是,但不應該使用:id => self.id而不是:id => self? – mb14

+0

@ mb14問題出在行'file = open(path_to_url,「r」)。read'。 url_for行工作正常 - 我在日誌中看到它,它是預期的。 – anders

+0

你的'path_to_url'在你的日誌中看起來像什麼?可能只是一個相對地址問題。我認爲File.open適用於你的本地文件系統環境,所以如果你的路徑以「/」開始,你實際上試圖從文件系統的根目錄找到一個文件。尾隨的斜線也可能令人困惑。 –

回答

1

我認爲這個問題與交易有關。新模型已被保存,但交易尚未結束。請嘗試after_commit而不是after_save。有關所有不同回調的詳細信息,請參閱the documentation on callbacks

相關問題