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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1728閲覧

jbuilderで配列を1件取得したい

ricy

総合スコア48

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/10/03 09:28

Railsのjbuilderで配列ではじめの1件だけ返したいのですが、

json.array! Item.where(type: 0).first do |item| json.id item.id json.created_at item.created_at end

エラーが発生します。

> undefined method `map' for #

以下は問題ないです。

json.array!Item.where(type: 0)do |item| json.id item.id json.created_at item.created_at end

アドバイスどうぞお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ruby

1Item.where(type: 0).first do |item| 2 json.id item.id 3 json.created_at item.created_at 4end

一件の場合はmapにならないので、メソッドがないと言われているのではないでしょうか。
上記でうまくいきませんか?

投稿2016/10/03 09:45

編集2016/10/03 09:47
goute

総合スコア216

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

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

ricy

2016/10/03 10:32

ありがとうございます、そのように試してみましたが、 今度はデータが返されなくなってしまいました・・・
goute

2016/10/03 11:11

今手元でコードが書けないので、後ほどこちらでも試してみます。
ricy

2016/10/03 12:21

とても助かります、ありがとうございます。
goute

2016/10/03 13:08

json.item do item = Item.where(type: 0).first json.id item.id json.created_at item.created_at end これでできませんかね。
goute

2016/10/03 13:09

上記の場合はitemというオブジェクト内にidとcreated_atが設定されます。 ルートに対してidとcreated_atを定義したい場合は、一番上と下のコードは除いてください。
ricy

2016/10/03 13:22

ありがとうございます、arrayでかえってきません。 {}になってしまい、[]でかえしたいのですが・・・
goute

2016/10/03 13:25

最終的に出力したいJSONのフォーマットをください。
goute

2016/10/03 13:27

1件固定なら json.array! Item.where(type: 0) do |item| json.id item.id json.created_at item.created_at break end になりますかね。 firstはオブジェクトを返していたはずです。
ricy

2016/10/03 14:05 編集

最終的にはこのように返したいです。 breakだと、値が返されませんでした。 {  "item_data": [ { "id": 1, "created_at": "2016-10-03T19:31:21.000+09:00" } ] }
goute

2016/10/03 14:50

モデル側でfindした結果を配列にぶちこんで、それをビュー側でうまくいったコードのまま出力させてはどうですか。 それだと出力したい件数が変わっても処理できると思います。
goute

2016/10/03 14:58

そもそも1件しか取得しない前提だと、配列形式にする理由がないように思います。 わざわざ配列形式する理由が何かあるんでしょうか。
goute

2016/10/03 15:08

どうしてもビューでやるならこうですかね。 json.item_data do json.child! do json.id item.id json.created_at item.created_at end end
ricy

2016/10/09 12:05

遅れてすみません、いただいた内容で実装することができました、 助かりました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問