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お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/31 08:36
2018/01/05 01:40
2018/01/05 01:57