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

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

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

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

Q&A

解決済

3回答

1517閲覧

Rubyの配列についての質問です

drizzing20

総合スコア363

Ruby

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

0グッド

1クリップ

投稿2016/10/15 04:47

編集2016/10/15 05:25

RUBY

1ids = [1,2,3] 2 3User.find_by(id: ids[0]) 4User.find_by(id: ids[1]) 5User.find_by(id: ids[2])

配列の中身の数だけ繰り返して代入するその数をids[]の中に入れる式を書きたいです。ヒントをください。お願いします

RUBY

1aa = ids.count 2aa.times do |bb| 3 User.find_by(id: ids[bb]) 4 end

↑で実行してみたのですが表示は
=>123

とでてしまい期待するものではありませんでした

RUBY

1[88] pry(main)> aa = [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')] 2=> [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')] 3[89] pry(main)> aa.each_with_index do |val,idx| 4[89] pry(main)* User.find_by(id: aa[idx]) 5[89] pry(main)* end 6=> [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')]

回答していただいた内容でやってみたのですが、以下のようになりIDのみの表示になってしまいます。レコードが取得できない理由をわかる方お願いします

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

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

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

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

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

guest

回答3

0

ruby

1ids = [1,2,3] 2aa = ids.count 3aa.times do |bb| 4 User.find_by(id: ids[bb]) 5end

での戻り値は aa.times の戻り値になります。
ids[1,2,3]aa[1,2,3].count3 ですので
aa.times3.times になり、戻り値は "3" になります。

User.find_by(id: ids[bb]) の部分は確かに実行されているのですが、戻り値は捨てられてしまっています。
捨てられないように救ってあげるには事前にArrayを用意して

ruby

1users = [] 2 3ids = [1,2,3] 4aa = ids.count 5aa.times do |bb| 6 users << User.find_by(id: ids[bb]) 7end

do .. end のブロック内で事前に用意した配列に入れておいてあげるとブロックを抜けた後 users の中に User が3つ入っています。

投稿2016/10/16 22:02

hana-da

総合スコア1728

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

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

0

ベストアンサー

これでどうでしょうか?
idsの配列の要素のidを持つUserオブジェクトの配列を取得できます。

ruby

1ids = [1, 2, 3] 2 3ids.map do |id| 4 User.find_by(id: id) 5end

取得できるオブジェクトのクラスは変わってしまいますが、

ruby

1ids = [1, 2, 3] 2User.where(ids)

のようにしても、期待している値を取得できるかもしれません。

投稿2016/10/15 05:28

cameluby

総合スコア891

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

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

0

each_with_index を使うとうまくいくと思います。

ids = [1, 2, 32] ids.each_with_index do |val, idx| puts "val: #{val}, idx: #{idx}" end

参考: http://ref.xaio.jp/ruby/classes/enumerable/each_with_index

投稿2016/10/15 05:01

Gazelle

総合スコア136

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

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

drizzing20

2016/10/15 05:23

やってみたのですが、このような表示になりました。見づらくてすみません。 表示がIDのみになってしまう理由がわかれば教えていただいてもいいでしょうか。お願いします。 pry(main)> aa = [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')] => [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')] [89] pry(main)> aa.each_with_index do |val,idx| [89] pry(main)* User.find_by(id: aa[idx]) [89] pry(main)* end => [BSON::ObjectId('5594cf981f08c35eb9000015'), BSON::ObjectId('5594cf981f08c35eb9000015')]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問