現在railsチュートリアルの13章を学習中です。
個々のユーザーページにそのユーザーが今まで投稿した内容を表示するプログラムを作成しているのですが、チュートリアルでは以下の様なコードの記述がされていました。
Ruby
1#app/views/users/show.html.erb 2<div class="col-md-8"> 3 <% if @user.microposts.any? %> 4 <h3>Microposts (<%= @user.microposts.count %>)</h3> 5 <ol class="microposts"> 6 <%= render @microposts %> 7 </ol> 8 <%= will_paginate @microposts %> 9 <% end %> 10 </div> 11 12#users_controller.rb 13 def show 14 @user = User.find(params[:id]) 15 @microposts = @user.microposts.paginate(page: params[:page]) 16 end
そして上記 <%= render @microposts %>の送信先が以下のようになります。
Ruby
1 #app/views/microposts/_micropost.html.erb 2 3 <li id="micropost-<%= micropost.id %>"> 4 <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> 5 <span class="user"><%= link_to micropost.user.name, micropost.user %></span> 6 <span class="content"><%= micropost.content %></span> 7 <span class="timestamp"> 8 Posted <%= time_ago_in_words(micropost.created_at) %> ago. 9 </span> 10</li>
ここで分からないことがファイル名を指定するrenderがなぜ変数を指定できているのかという点です。
この変数自体指定先の_micropost.html.erbと全く繋がりがないように思えてしまい、render('microposts/micropost')ではないことに疑問を感じます。
またもう一つの疑問として、paginateメゾットを用いた@micropostsには複数の投稿データを入れる変数にも関わらず、それを表示する際にループを使わずとも動作をする仕組みが分かりません。
ruby
1#app/views/users/show.html.erb 2 3 <% @microposts.each do |micropost| %> 4 <ol class="microposts"> 5 <%= render micropost %> 6 </ol> 7 <% end %> 8 <%= will_paginate @microposts %> 9 <% end %>
このようなコードではいけないのでしょうか?(また上記のコードでも一応動作の確認は取れました)
まだ学習を始めたばかりの初心者ですが返答していただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/03 14:27