2008-12-01 36 views
0

我在視圖中有一個div標記,我想用通過Gruff生成的圖形進行更新。如何使用Rails中的生成圖像更新佔位符的內容?

我有以下的控制器動作,其在端部執行此查閱

send_data g.to_blob, :disposition=>'inline', :type=>'image/png', :filename=>'top_n.pdf' 

如果我直接調用這個動作,我可以看到曲線圖。 (更多細節here如果REQD。)

如果我添加一個link_to_remote_tag調用通過AJAX傳遞特定的輸入上面的動作,產生該圖並嘗試更新的佔位符div標籤...我看到亂碼。

我想我可以使用g.write(filename.png)將圖形寫入png文件如何在運行時在視圖中的div標籤內嵌入圖形?

回答

1

在你link_to_remote標籤只是設置:完整的東西是這樣的:

:complete => "updateImg(id_of_div, request.responseText)" 

,寫一個JS函數:

function updateImg(id, img) 
{ 
    $(id).innerHTML = '<img src="' + img + '" />'; 
} 

在哪裏,當你想顯示id_of_div是div的id de形象。

request.responseText var來自AJAX調用的請求,我的意思是,當您的代碼將圖形寫入png文件時,完成返回此新png路徑的方法(render:text => path_to_new_image) ;然後,在:complete中使用此請求變量。

+0

更新我的博客文章與解決方案基於這篇文章。謝謝ARemesal。 – Gishu 2008-12-01 19:29:53

+0

不客氣;) – ARemesal 2008-12-01 21:46:16

0

你可以使用標準的img標籤來調用一個控制器動作來返回一個生成的png。如果設置控制器使用respond_to是這樣的:

def graph 
    # get the relevant data for 'g' here 
    respond_to do |format| 
     format.html #uses the default view if relevant (good for debugging) 
     format.png do 
      send_data g.to_blob, 
       :disposition=>'inline', 
       :type=>'image/png', 
       :filename=>'top_n.pdf' 
     end 
    end 
end 

你甚至有發電機這樣一個正常的尋找網址:

<img src="controller/graph.png" alt="Something"/> 

如果有機會的圖像生成能失敗:您可以在服務器上存儲回退映像並讀取該文件並返回該文件。

如果這個世代相當繁重,並且不太可能一直在改變,那麼你也可以冷靜地將所得到的文件緩存起來,並且如果你確定數據沒有改變,那麼就得到它。您可以使用ARemesal建議的方法來延遲添加圖像鏈接,直到圖像生成,然後直接鏈接到緩存文件。 (這取決於你的具體情況什麼是最好的)