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

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

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

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

2回答

3708閲覧

ActiveRecordをJSONに変換する際、レコード内とは別のものも含めたい

einzbern00

総合スコア30

Ruby

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

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2016/02/03 22:05

###前提・実現したいこと
Sinatraを利用してデータベースの値をJSONに変換して返すAPIを作りたいのですが、
ActiveRecordを利用したものを to_json で返すと、

json

1[{"colum1":"test1","column2":"test10"},{"colum1":"test2","column2":"test20"},{"colum1":"test3","column2":"test30"}] 2

という形になると思います。

これに、データベースのバージョンやAPIのバージョン等を含めて

json

1{ 2"dbversion":1, 3"apiversion":2, 4"body":[{"colum1":"test1","column2":"test10"},{"colum1":"test2","column2":"test20"},{"colum1":"test3","column2":"test30"}] 5}

のような形にしたいと考えています。

###発生している問題
http://kadoppe.com/archives/2012/04/to_json_instance_method.html
http://dqn.sakusakutto.jp/2014/02/ruby_to_json.html
このページやその他ページを参考にした結果、

Ruby

1class Database < ActiveRecord::Base 2end 3 4def JsonGenerator(json) 5 data = { 6 :dbversion => '1', 7 :apiversion => '2', 8 :body => json 9 } 10 return data.to_json; 11end 12 13 14get '/' do 15 content_type :json, :charset => 'utf-8' 16 database = Database.all 17 jsondatabase = database.to_json() 18 JsonGenerator(jsondatabase) 19end 20

こういった形式も考えたのですが、

json

1{ 2"dbversion":1, 3"apiversion":2, 4"body":"[{"colum1":"test1","column2":"test10"},{"colum1":"test2","column2":"test20"},{"colum1":"test3","column2":"test30"}]" 5}

このようにbodyの内部が配列として認識されない状態になります。

なにぶんRuby初心者の為、初歩的な思い違い等あるかもしれませんが、
何卒ご教授の程よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

試してはいませんが、
:body => json

:body => JSON.parse(json)
と変更したら如何でしょう?

投稿2016/02/06 23:31

katoy

総合スコア22324

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

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

0

ベストアンサー

とりあえず、緊急回避手段でしかないですけど、
body: "%placeholder%"
として、activerecord の結果を to_jsonした結果と、付随情報に body がプレースホルダーのjsonの2つを文字列置換で連結してしまう、という案はどうでしょう。

投稿2016/02/04 01:40

ipadcaron

総合スコア1693

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問