<DAY89>kaminari perで指定した引数と表示が異なる
学習状況
●学習日数 89日
●学習時間(本日) 8.5時間
●累計学習時間 357.5時間
●一日あたりの平均学習時間 3.96時間
結論
部分テンプレートの渡し方に問題あり。
<% @tweets.each do |tweet|%> <%= render @tweets %> (繰り返し処理が重複) <%end%>
以下に変更で解決
<%= render @tweets %>
部分テンプレートについて
下記記事を参考にしました。
慣れるまでは、明示的な書き方にしておいた方がよさそうだ。
表示がおかしかった時のview画面。
<div class="container"> <div class="box"> <% @tweets.each do |tweet|%> <%= render @tweets %> <%end%> </div> <%= paginate(@tweets)%> </div>
これを正しく意図した形で部分テンプレート呼び出すには、
<div class="container"> <div class="box"> <% @tweets.each do |tweet|%> <%= render partial: "tweet",locals: { tweet: tweet }%> <%end%> </div> <%= paginate(@tweets)%> </div>
部分テンプレートでは名前が_tweetのviewでも変数はtweetとして使えるようにすると定義。 以下形でも全く同じ挙動をとるが、eachを外す必要がある。
<div class="container"> <div class="box"> <%= render @tweets %> </div> <%= paginate(@tweets)%> </div>
理由は、render @tweets
とするとモデルから引っ張ってきたデータをそのまま
ビューに連続表示してくれる。つまりeachの役割をしてくれるからだ。
ちなみに、コントローラでは以下記述をしている。
@tweets = Tweet.includes(:user).order(created_at: :DESC).page(params[:page]).per(5)
上記の認識がなく、eachとrender @tweets と2重でeachをかけている状態であった。 なので、渡した引数の2乗分のデーターが表示されていた。
最後に
エラー解決できたのが非常に嬉しい!