Конечная точка API Google Charts API хранится в переменной класса @@url
внутри класса Gchart. Поэтому изначально я думал о том, чтобы установить переменную класса, чтобы установить URL-адрес https
.
# Put this in an initializer
Gchart.send :class_variable_set, :@@url, "https://chart.apis.google.com/chart?"
увы Google Charts не работает через https. Поэтому мы не можем использовать этот метод. Так как методы класса Gchart просто возвращают URL-адрес, мы можем заключить вызовы в метод прокси-контроллера, который выполняет API-вызов на стороне сервера и передает его клиенту через метод Action_ontroller send_data с использованием выбранного протокола. Таким образом, вам не нужно изобретать колесо библиотеки Gchart.
class ChartsController < ApplicationController
require 'net/http'
require 'gchart'
def show
options = params.except :controller, :action
options[:data].map! { |x| x.to_i } if options[:data]
begin
chart = URI.parse(Gchart.send options.delete(:type), options)
send_data Net::HTTP.get(chart), :content_type => 'image/png', :disposition => 'inline'
rescue
raise ActiveRecord::RecordNotFound
end
end
end
Помощник, который вы можете использовать в своих представлениях:
module ApplicationHelper
def chart_tag(options ={})
image_tag chart_path(options)
end
end
и маршрут
map.resource :chart, :only => :show
Использование:
<%= chart_tag :type => "line", :size => '200x300', :title => "example title", :bg => 'efefef', :legend => ['first data set label', 'second data set label'], :data => [10, 30, 120, 45, 72] %>
Код не проверен, но должен дать вам хорошее начало.