Jbuilderは JSONP非対応なので jpbuilderというgemを使う…のだが,トラップが多く半日ぐらいハマった.
対応手順
gemのインストール
Gemfileにgem 'jpbuilder'
追加.
デフォルトのコールバック関数名の設定
initializer(config/initilizers/jpbuilder.rb
とか)にデフォルトのコールバック関数名を書く.
JPbuilderHandler.default_callback = "myJsCallback"
View側の対応
Viewの.json.jbuilder
を.json.jpbuilder
にリネームする.
(e.g. show.json.jbuilder
→ show.json.jpbuilder
)
注意点
普通のJSONと使い分けたい場合
デフォルトのコールバック関数名をnilにする.
JPbuilderHandler.default_callback = nil
これでパラメータcallback
でコールバック関数名を渡してあげたらJSONP,何も渡さなければJSONが返ってくるようになる.
Jbuilderのpartialを使いたい場合
呼び出し元のファイル(親のファイル)は.json.jpbuilder
に, partialのファイル(子のファイル)は.json.jbuilder
のままにしてあげないとmissing templateになっちゃう.
蛇足
jpbuilder作者曰く,
I hope that in the future this can somehow be merged into the jbuilder core. However as of today, the project seems dead (20+ issues and last commit almost 5 months ago), so I am not going to put the effort into a pull request just yet.
Using JSONP with Jbuilder => Productively Distracted
だそうです.つらそう.