現在、Michael Hartl のチュートリアル Ruby on Rails Tutorial http://ruby.railstutorial.org/ruby-on-rails-tutorial-bookを読んでいます。特定の部分変数がどこから来るのか混乱しています。彼のチュートリアルでは、ユーザーとマイクロポストを作成しています。ユーザーは自分のメイン ページ (フィードと呼ばれる) にマイクロポストを作成し、そこに投稿することができます。レイアウトはhttp://ruby.railstutorial.org/chapters/user-microposts#fig:proto_feed_mockupのようになります。User モデルは次のようになります (すべてを掲載しているわけではありません)。
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
def feed
Micropost.where("user_id = ?", id)
end
end
Micropost モデルは次のようになります。
class Micropost < ActiveRecord::Base
belongs_to :user
end
テキストの中で著者は、User モデル内の feed メソッドは次のように同等に記述できると述べています。
def feed
microposts
end
なぜ同じなのですか?
次の質問はパーシャルに関するものです。ユーザーの表示ページ (show.html.erb) で、私の間違いでなければ、これで _microposts.html.erb が呼び出されます。
<%= render @microposts %>
_microposts.html.erb は次のようになります。
<li>
<span class="content"><%= micropost.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(micropost.created_at) %> ago.
</span>
<% if current_user?(micropost.user) %>
<%= link_to "delete", micropost, method: :delete,
data: { confirm: "You sure?" },
title: micropost.content %>
<% end %>
</li>
ここでの私の質問は、マイクロポスト変数はどこから来たのですか? このパーシャルを呼び出す @micropost 変数と同じですか?
ユーザーのホームページ (home.html.erb) で、次のような _feed.html.erb パーシャルへの呼び出しがあります。
<%= render 'shared/feed' %>
_feed.html.erb は次のようになります。
<% if @feed_items.any? %>
<ol class="microposts">
<%= render partial: 'shared/feed_item', collection: @feed_items %>
</ol>
<%= will_paginate @feed_items %>
<% end %>
@feed_items がどこから来たのか知っています。コントローラーにセットされています。_feed_item.html.erb は次のようになります。
<li id="<%= feed_item.id %>">
<%= link_to gravatar_for(feed_item.user), feed_item.user %>
<span class="user">
<%= link_to feed_item.user.name, feed_item.user %>
</span>
<span class="content"><%= feed_item.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
</span>
<% if current_user?(feed_item.user) %>
<%= link_to "delete", feed_item, method: :delete,
data: { confirm: "You sure?" },
title: feed_item.content %>
<% end %>
</li>
同様の質問は、変数 feed_item がどこから来て、何が含まれているのかということです。
ありがとう、マイク