質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

1138閲覧

Rail APIモード JSON形式 ほかのテーブルからデータをもってきたい

masaosan18

総合スコア65

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/09/03 01:05

編集2020/09/03 04:07

Rails API モードでアプリケーションを作成しています。

$ curl localhost:3000/offices

このようなコマンドを打つとJSON形式でデータが返ってくると思うのですが、これを現状はコントローラー内を,,,

class OfficesController < ApplicationController def index offices = Office.all render json: offices end end

このように実装しています。

ここで、officeターブル意外のデータをJSONで返ってくるようにするためにはどのように実装すればよいのでしょうか???

出したいJSON例

[ { "id": "1", "予約の可否情報": "true or false", "name", "事業所名", "near_station", "最寄りの駅情報", "staff_number", "所属スタッフ人数", "tel", "電話番号", "introduction", "事業所の説明文?", "thank", "thank文章", "営業日", { "月": true, "火": true, "水": true, "木": true, "金": false, "土": true, "日": true, }, },

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2020/09/03 01:08

curl localhost:3000/offices と打って Office以外ですか? 具体的にはどのモデルのもので、Officeとの関連は?
masaosan18

2020/09/03 01:35

ありがとうございます。 officeモデルにhas_many :users Userモデルにhas_many :thanks このthanks内のデータをOfficeの一覧表示時に表示したいなと考えています。
winterboum

2020/09/03 02:10

どういう構造のJSONにしたいのか、により方法が変わります。 質問欄に、JSONの例を載せてください
winterboum

2020/09/03 03:01

そのJSONは 「officeモデルにhas_many :users Userモデルにhas_many :thanks このthanks内のデータをOfficeの一覧表示時に表示したい」 になっていないようにみえますが
masaosan18

2020/09/03 03:20

このJSONを表現するにはどのようなリレーションを組む必要があるのでしょうか・・・。
masaosan18

2020/09/03 03:22

migrationファイル自体を変更する必要があるのかな、、みたいなことを考えています。
winterboum

2020/09/03 03:57

「このJSON」って質問欄に追記頂いたやつ? これ Office、User、Thank と関係ありますか?Userはともかく、Thank のデータがどこに来る? ひとつのOfficeに復数のUserが関連してそれから各々復数のThankがあるわけで、それをどのようにJSONに表すのか、を知りたいのです
guest

回答3

0

ベストアンサー

一番かんたんなのはハッシュに入れちゃうことです。

ruby

1res = {} 2offices.each do |office| 3 office_hash = { 4 id: office.id, 5 reservable: office.reservable, 6 : 7 // こんなアクセス方法ではないかもしれませんが、なんにせよこんな感じで好きなようにコードを書いて配置できます 8 thank: office.thank.message 9 } 10 res << office_hash 11end 12 13// 最終的にハッシュを渡せば、その構造に応じたjsonが返されます 14render json: res

さらに本格的にやるのであれば、jbuilderやjqというのがよく使われています。

https://github.com/rails/jbuilder
https://github.com/winebarrel/ruby-jq

こちらは、普通のHTMLを返すときと同じようにjson用のviewファイルを書く感じになります。
ハッシュに入れる形式だと、jsonが複雑になるにつれてcontrollerのコードが長くなって読みづらくなってくるので、
メンテナンス性が大事な開発の現場ではこっちを使うことが多いですね。

投稿2020/09/10 22:07

編集2020/09/10 22:08
mogya

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaosan18

2020/09/14 08:36

ありがとうございます! この場合だと、例えばコントローラ内のindexアクションとshowアクションでJSONのレスポンスを変えるというようなこともできるのでしょうか???
mogya

2020/09/14 09:56

そうですね。indexとshowメソッドに異なるレスポンスを書けばそれぞれ別のレスポンスが帰ります。 ちなみにjbuilderでも同様に、index.json.jbuilderとshow.json.jbuilderを使い分けることが可能です
masaosan18

2020/09/16 07:49

ありがとうございます!!!!
guest

0

gemのjbuilderを使用するとどのようなデータで返すのかを決めることができるので使用してみてはどうでしょうか?

投稿2020/09/10 12:56

nasuk47

総合スコア311

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaosan18

2020/09/14 08:34

jbuilderも検討しましたが、これに関しては同じモデルであっても表示させるページごとにJSONのレスポンスを変更するというようなことも可能なのでしょうか?
nasuk47

2020/09/14 22:04

> 同じモデルであっても表示させるページごとにjsonのレスポンスを変更する 同じモデルでページごとで表示するデータを変更する場合フロント側でその処理は行った方がいいのでは? 例えば1ページ目はAモデルのa,bを表示2ページ目はAモデルのcを表示する場合 rails側でAモデルのa, b, cのデータを取得してフロント側で表示するデータを変更する のような実装になるような気がします。。
guest

0

これはこの質問で解決したのでは?
さらに 最新のThank を追加したいならこの質問の回答をmergeさせます

投稿2020/09/14 23:11

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問