Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

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を作成する時のあれこれ」

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away