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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1126閲覧

Railsでコントローラで取り出したデータを順番に表示させる方法はありますか?

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/12/30 13:16

編集2017/12/31 08:32

Rails5.1.3でWebアプリケーション制作の勉強をしています。
eachメソッドを使って取り出したレコードを順番に表示させる方法を教えていただかないでしょうか?
現状はViewに記述し表示出来ていますが「Viewにはデータベースにアクセスするコードは書くべきではない。」と参考書に書いてあったので
コントローラに記述しましたが上手く表示できなくて困っています。
現状は以下のように記述し表示しています。

customer_controller.rb def sponsor @customer = Customer.find_by(id: current_customer.id) mynickname = @customer.nickname @mysponsor = Customer.where(sponsor1: mynickname).pluck(:id)----5つのidを取り出しています。
spopnsor.html.erb <% @mysponsor.each do |v| %> <% spo1 = Customer.find(v) %>-------------------------------データベースにViewでアクセスするべきではない。 <% @sf_name = spo1.family_name + ' ' + spo1.given_name %> <% @sn_name = spo1.nickname %> <% render "customer/shared/sponsor" %>
5人分の表示をしています。 _sponsor.html.erb <tr><th>ユーザー氏名</th><td><%= @sf_name %></td></tr> <tr><th>ニックネーム</th><td><%= @sn_name %></td></tr>

以下のようにコントローラに記述してViewで表示したいのですが

customer_controller.rb def sponsor @customer = Customer.find_by(id: current_customer.id) mynickname = @customer.nickname @mysponsor = Customer.where(sponsor1: mynickname).pluck(:id)  @mysponsor.each do |v|  spo1 = Customer.find(v)  @sf_name = spo1.family_name + ' ' + spo1.given_name  @sn_name = spo1.nickname end end

上のようにコードをコントローラに記述すると5番目のデータしか表示されません。(当然なのですが・・・)
コントローラでeachメソッドで取り出したデータを取り出した順に表示させる方法をどなたか教えていただけないでしょうか?
宜しくお願いします。

質問を追記させていただきました。

回答ありがとうございました。
教えていただいたコードでブロックパラメータ(sponsor)にCustomerのレコードを要素として取り出し順番に処理していきますが
さらに、そのCustomerテーブルに関連付いたテーブル(Score)のレコードを取り出す方法はあるのでしょうか?
以下のように記述しても取り出せなかったので教えていただけないでしょうか?

<% @mysponsors.each do |sponsor| %> <tr><th>ユーザー氏名</th><td><%= sponsor.family_name + ' ' + spo1.given_name %></td></tr> <tr><th>ニックネーム</th><td><%= sponsor.nickname %></td></tr> <% point = sponsor.score %> -------------------------------- 上のユーザーのscoreレコードを取り出したい。   <tr><th>スコア</th><td><%= point.1point %>点</td></tr> ------ 1pointカラムの値を表示する。 <% end %>

以下のようにな感じで表示したいのです。

ユーザー氏名 佐藤 桃太郎 ニックネーム モモタロウ スコア    12,345点
ユーザー氏名 木村 金太郎 ニックネーム キンタロウ スコア    23,005点
ユーザー氏名 佐々木 一太郎 ニックネーム イチタロウ スコア    2,789点





yorosikuお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

本題に入る前に,

rb

1 @customer = Customer.find_by(id: current_customer.id)

が何をやっているのかよくわかりません。
current_customerCustomer モデルのインスタンスですよね?
その id を使って Customer を検索していますよね。
@customer って,結局 current_customer と同じ物じゃないんでしょうか?

ちなみに,id で検索するのは

rb

1Customer.find_by(id: hogehoge)

でなく

rb

1Customer.find(hogehoge)

と書きましょう。

さて本題ですが,

rb

1Customer.where(sponsor1: mynickname)

で当該の Customer が検索できるわけですよね。
わざわざここから id の配列を作らなくても,これをそのままビューに渡してやればいいのです。

つまり,コントローラーでは

rb

1 @mysponsors = Customer.where(sponsor1: mynickname)

とします。(複数なんだから変数名は複数形に)

そして,ビューでは

erb

1<% @mysponsors.each do |sponsor| %> 2 <tr><th>ユーザー氏名</th><td><%= sponsor.family_name + ' ' + spo1.given_name %></td></tr> 3 <tr><th>ニックネーム</th><td><%= sponsor.nickname %></td></tr> 4<% end %>

とすればよいのではありませんか。

投稿2017/12/30 14:18

編集2017/12/30 14:23
scivola

総合スコア2108

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

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

koume

2017/12/31 08:36

回答ありがとうございます。教えていただいたブロックパラメータの要素に対してさらに関連付けられた テーブルのレコードを取り出す方法を教えていただけないでしょうか?(質問に試したコードを追記させていただきました。) いろいろ試してみましたが、取り出せなかったので教えていただけないでしょうか? 初心者でわかりにくい質問内容で申し訳ございませんが宜しくお願いします。
scivola

2018/01/05 01:40

「取り出せなかった」について具体的に書いてもらえますか。エラーが出た,とか。
scivola

2018/01/05 01:57

ビューのコードに point.1point というのが出てきますが,数字で始まるカラム名は使えないはずです。マイグレーションでエラーが出るはずです。 また,point.1point というメソッド呼び出しは(メソッド名が数字で始まるので)Ruby の文法としてできません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問