質問

私はいくつかの簡単なチャート作成のための私のレールのアプリでgooglechartsの宝石を使用しています。それは私のアプリは常に暗号化SSLであることが要求されることを除いて、見事に動作します。 Googleのチャートを引き出すためには、当然のチャートの宝石はほとんどのユーザーのためのページ上のいくつかの安全でないコンテンツに関する警告ブラウザにつながるGoogleにHTTP要求を行います。誰がこの問題に直面し、警告を回避するためのソリューションを考案していますか?私は、HTTP呼び出しを作るための方法を把握する必要があり、Googleはローカルに返す画像を保存して、アプリでそれを表示します怖いですが、他の誰かがすでにこれを処理するための良い方法を見つけた考え出します。

役に立ちましたか?

解決

API GoogleのチャートAPIエンドポイントはGchartクラスの内部クラス変数@@urlに格納されます。だから、最初は私は、HTTPS

のURLを設定するには、クラス変数をmonkeypatching考えます
# Put this in an initializer
Gchart.send :class_variable_set, :@@url, "https://chart.apis.google.com/chart?"

Googleのチャート悲しいかな、HTTPS経由では動作しません。だから我々は、そのメソッドを使用することはできません。 Gchartクラスのメソッドは、単にURLを返すとして、我々は選択のあなたのプロトコルを使用してActionController SEND_DATAメソッドを介してAPIコールサーバ側とクライアントへのプロキシそれをしないプロキシコントローラメソッドで呼び出しをラップすることができます。その方法は、あなたが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] %>

コードがテストされていないですが、あなたに良いスタートを与える必要があります。

他のヒント

Googleのチャートは、現在、SSLをサポートしています:

使用 https://chart.googleapis.com/chartする

の代わりに: http://chart.apis.google.com/chartする

私はGchartRBの宝石を使用していて、第1の溶液の修正版は、同様に私のために働きました。あなたはそれを正しく処理するためにURI.parseためto_escaped_urlメソッドを使用する必要があります。

私はこれを行うだろう、既存のプラグインを知りませんが、あなたは自分でそれを行うことができます。単にHTTPを経由して、チャートを取得し、それをすぐに返され、新しいコントローラのメソッド(ファイルに保存する必要はありません)を書く。

コントローラで

require 'net/http'
def googlechart
  send_data Net::HTTP.get("http://chart.apis.google.com/chart?#{params[:api]}"),
    :content_type => 'image/png',
    :disposition  => 'inline'
end

鑑みます:

<%= image_tag googlechart_path(:api=>'cht=p&chd=s:Uf9a&chs=200x100&chl=January') %>

ちょうどあなたのルートを設定し、あなたはすべてのセットです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top