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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

708閲覧

Railsの配列で検索したデータを表示する方法を教えてください。

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/10/12 10:53

編集2017/10/12 11:06

Railsアプリケーションプログラミングの勉強中です。
技術的な質問になってしまうのですがテーブルから取り出したデータを配列にし、そのデータをビューで表示させたいのですが
取り出したデータの最後のデータが配列の数だけ表示されてしまいます。たぶん単純なことだと思いますが、どのように記述すれば
いいのでしょうか?

やりたいことは以下になります。

1,表示したい内容のレコードを取り出し、id を配列にする。
2,取り出した配列(id)のレコードの氏名とニックネームを取り出しインスタンス変数に代入する。
3,配列の要素数を調べる。
4,配列の要素数だけ部分テンプレートの内容を表示するように繰り返す。
5,表示する内容は各レコードの氏名、ニックネーム。

単純に取り出したデータを順番に表示させたいだけなのですが上手くいかないのです。

です。実行したコードは以下になります。

コントローラ @customer = Customer.find_by(id: current_customer.id) --------------# ログイン中のレコード取得 eagle = @customer.nickname  -----------------------------------# ログイン中のニックネーム取り出し。 customer_ids = Customer.where(sponsor1:eagle).pluck(:id) -------# ログイン中の友人のidを配列で取り出し。 @xxx = customer_ids.length ------------------------------------# 配列の要素数は6。 customer_ids.each do |v| ----------------------------------------# 友人のidを繰り返し実行。 bbb = Customer.find(v) ----------------------------------------# 友人のレコードを取得。 @f_name = bbb.family_name + bbb.given_name --------------------# 友人の氏名を変数に代入。 @n_name = bbb.nickname ----------------------------------------# 友人のニックネームを変数に代入。
部分テンプレート customer/shared/sponsor <table class="attributes"> <tr><th colspan= "3">※ユーザー氏名</th></tr> <tr><th>ユーザー氏名</th><td><%= @f_name %></td></tr> <tr><th>ニックネーム</th><td><%= @n_name %></td></tr> </table>
テンプレート <div class="table-wrapper"> <% @xxx.times do |i| %> -----------------------------------------# 要素数の数だけ部分テンプレート呼び出し。 <%= render "customer/shared/sponsor" %> -----------------------# 部分テンプレートの読み込み。 <% end %> </div>

これを実行すると配列の要素の最後の要素の表示が6つ表示されてしまいます。(前の5つの要素の分が表示されません。)

表示内容 ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ ※ユーザー氏名 ユーザー氏名 加藤四郎 ニックネーム モモタロウ

たぶん以下の部分を全て実行した後でデータがテンプレートに送られているためだと思いますが、1つ取り出したら
テンプレートを読み込んで表示させ、その後次の要素のデータを取得して表示させ・・・みたいに読み込ませるには
どのように記述したらいいのでしょうか?どなたか教えてください。宜しくお願いします。

customer_ids.each do |v| ----------------------------------------# 友人のidを繰り返し実行。 bbb = Customer.find(v) ----------------------------------------# 友人のレコードを取得。 @f_name = bbb.family_name + bbb.given_name --------------------# 友人の氏名を変数に代入。 @n_name = bbb.nickname ----------------------------------------# 友人のニックネームを変数に代入。

追記:
上記コードの最後に「テンプレートを読み込みなさい」みたいなコードなどがあれば記述すればいいとは思うのですが
そんな都合のいいコードが存在するのかわからないので教えてください。

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

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

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

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

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

guest

回答1

0

自己解決

データの取り出しはコントローラに記述し、テンプレートの方にeachメソッドで
繰り返しを記述したら上手く表示出来ました。

投稿2017/10/12 12:29

koume

総合スコア458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問