Вы можете использовать обычный тег img
для вызова действия контроллера, которое возвращает сгенерированный png. Если вы настроили контроллер на использование response_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
У вас даже будет обычный URL для генератора, подобный этому:
<img src="controller/graph.png" alt="Something"/>
Если есть вероятность, что генерация изображения может быть неудачной: вы можете сохранить запасное изображение на сервере, прочитать этот файл и вернуть его.
Если генерация довольно тяжелая и вряд ли изменится все время, когда вы все время заморозите, кешируйте полученный файл и получите его вместо этого, если решите, что данные не изменились. Вы можете использовать метод, предложенный ARemesal, чтобы отложить добавление ссылки на изображение до тех пор, пока изображение не будет сгенерировано, а затем сделать ссылку непосредственно на кэшированный файл. (Это зависит от вашего конкретного случая, что лучше)