LoginSignup
26
23

More than 5 years have passed since last update.

Jbuilderファイルを利用してJSONデータを返却する

Last updated at Posted at 2017-02-05

はじめに

理解が曖昧なため、ところどころワードが変なところがあるかもしれません。問題ある点はご指摘いただけると幸いです。

version

Ruby: 2.3.1
Rails: 5.0.1

ぶつかった問題

gif.gif

簡易チャットアプリを作成中。
Controller = 投稿機能を持つAPIとして使用し、非同期通信にてメッセージ投稿を行なっている。

ControllerからJavaScriptにメッセージの情報を返す際に、

messages_controller.rb
respond_to do |format|
  format.html { redirect_to :root }
  format.json { render json: @messages }
end

というようにして@messagesを送ると、JavaScript内でアソシエーションを利用したデータの取り出しができない(ex @message.user.nameなど)。どうやら、送られたデータはインスタンスではなく、単なるJson形式(ハッシュ)のデータのためにJavaScript内で@message.user.nameのような記述ができない模様。

したいこと

JavaScript内でアソシエーションを利用したデータの取り出しをできるようにする。

対応策

messages_controller.rb
respond_to do |format|
 format.html { redirect_to :root }
 format.json { render 'messages', handlers: 'jbuilder' }
 # handlersで、 拡張子「.jbuilder」のファイルだと指定している。
 # format.json { render 'messages.json.jbuilder' }と書いても可
end

上記のようにコードを変更し、

messages.json.jbuilder
json.body @message.body
json.name @message.user.name

Jbuilderファイルを作成し、
json.bodyに@message.bodyを、json.nameに@message.user.nameを定義することで、
JavaScript内でデータを取得できるようになりました。

参考サイト

Git Hub / Jbuilder
Rails Document
しめ鯖日記 「Rails4でJSONを作るならto_jsonよりjbuilder」
東京伊勢海老通信 「RailsでJSONを返却するAPIを作成する時のあれこれ」

26
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23