

indexページにそれぞれの値のデータと、d3jsを使ってグラフを表示させようとしているのですが、以下のように書くと  
ページ表示のときと、グラフ描画の際にjsonを読み込むときの２回に渡って  
@fooというデータを作るための処理を行ってしまいます。  
htmlを表示した段階で@fooにデータはできているのでそれをそのままグラフ描画のために使うにはどうすればいいでしょうか。

[code]

    def index
      @hoge = ...
      @foo = @hoge....
      respond_to do |format|
    　　 format.html
    　　 format.json {render :json => @foo }
      end
    end
    
[/code]


CC BY-SA 3.0
2015-05-19T03:59:11.440
10356
2015-08-17T10:00:35.107
2015-05-19T04:04:31.113
8875
8875
question
ruby-on-rails json
respond_to で html と json で返すデータの共有方法を知りたい


まず **基本的には** 1回のリクエストに対しては1回の応答しか出来ません。

  1. HTMLページのリクエストに対して `@foo` を作成してHTMLを応答(index)
  2. ブラウザが ajax を使って JSON を要求しそれを応答(index とは別の物である必要があります)

という2回のリクエストおよびレスポンスが必要です。例えば[ここ](http://karur4n.hatenablog.com/entry/sinatra-
jquery-de-ajax)にある様に、エンドポイントは2つ必要です。  
どうしても

  * HTML でも @foo の中身を表示したい
  * JSON でも @foo を返したい

という事であれば、この2回のリクエストに対して @foo
を作る処理を1回にする為に揮発性のキャッシュを使うのが良いと思います。一定時間だけメモリに保持するといった物です。

もしくは HTML も @foo の中身を表示するのであれば、ajax をやめてしまうのも一つの方法です。


CC BY-SA 3.0
2015-05-19T05:29:30.550
10357
2015-05-19T05:29:30.550
440
10356
answer