前提・実現したいこと
現在、フロントでReact.js
、バックでRuby on Rails
を使用してWebアプリを試作しています。RailsはAPIモードで使用しており、レスポンスとしてjsonを返す際にrender :json
ではなくjbuilder
を使用したいと考えています。
発生している問題・エラーメッセージ
APIモードでのjbuilderの使い方について調べたところ、以下の記事にたどり着きました。
https://qiita.com/u_kan/items/582a367a5a6adef365a8
この記事にある通りにjbuilder
のコメントアウトを削除し、controllerにも追記をしたのですが、レスポンスとしては何も帰ってきていませんでした。もちろんjbuilder
はviewに作成しております。
次に試したのは以下の記事の内容で、ApplicationController
に下にあるような項目を追記して再度APIを叩きました。
https://stackoverflow.com/questions/35067579/making-jbuilder-work-with-rails-5-api-mode
ApplicationController
1class ApplicationController < ActionController::API 2 include ActionController::ImplicitRender 3 include ActionView::Layouts 4 5end
結果としては、ActionController::ImplicitRender
はincludeをしてもしなくても結果は変わらなく、include ActionView:Layouts
と記述すると以下のようにjsonファイルがjson形式に編纂されず、ベタガキのままでレスポンスとして帰って来るようになりました。
jbuilder
1json.memos @memos do |memo| 2 json.id memo.id 3 json.content memo.content 4 json.time memo.created_at.strftime('%H:%M') 5end
(jsonも上記と全く同じ形式で帰ってきました)
また、該当するコントローラーのコードは以下の通りです。
MemosController
1class V1::MemosController < ApplicationController 2 3 def index 4 today = Time.now 5 today_range = today.beginning_of_day..today.end_of_day 6 @memos = Memo.where(user_id: 1, created_at: today_range) 7 render 'index', formats: 'json', handlers: 'jbuilder' 8 end 9 10 def create 11 content, user_id = memos_params[:content], memos_params[:user_id] 12 memo = Memo.new(content: content, user_id: user_id) 13 if memo.save 14 render json: {message: 'success'} and return 15 else 16 render json: {message: 'error'} and return 17 end 18 end 19 20 private 21 22 def memos_params 23 params.fetch(:attributes, {}).permit(:content, :user_id) 24 end 25end 26
こちらでお伺いしたいのは、Rails5のAPIモードでjbuilderを使用する方法、そして、なぜボクのやり方だとjbuilder
が正常に動作しないのか、ということです。
ボク一人でずっと悩んでいてもラチがあかないと考え、こちらに質問を投稿させていただきました。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。