我目前正在通過Michael Hartl的教程Ruby on Rails教程http://ruby.railstutorial.org/ruby-on-rails-tutorial-book。我對某些部分變量來自哪裏感到困惑。在他的教程中,他創建了Users和Microposts。用戶可以在他的主頁上創建一個Micropost(稱爲Feed)並將它們發佈到那裏。佈局看起來像這樣http://ruby.railstutorial.org/chapters/user-microposts#fig:proto_feed_mockup。現在,用戶模型看起來像這樣(我不張貼整個事情):實例vs局部變量
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
def feed
Micropost.where("user_id = ?", id)
end
end
的模型微柱看起來是這樣的:
class Micropost < ActiveRecord::Base
belongs_to :user
end
在文本的作者說,進料方法內用戶型號可以這樣等效寫入:
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變量來自哪裏?它是否與調用此部分的@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來自何方,它包含哪些內容?
感謝, 麥克