ruby 1.8.7 + rails 2.1.0
Rails 在 partial 中 傳遞 collection,默認(rèn)的循環(huán)變量 是 partial的名字(約定)。或者你想改變變量名的話,可以使用 :as 參數(shù)聲明一個(gè)變量。。。不能用慣性思想 for ...........in........等
例如:
之前錯(cuò)誤的寫法:
partial : _feednews.html.erb
<%= render :partial => 'shared/feednews_item',:collection => @feeds = feed_collection("hot").items %>
partial : _feednews_item.html.erb
<ul>
<% for feed in @feeds.items %>
<li class="news"><a href="<%= feed_link(feed.link) %>" target="_blank"><%= feed_title(feed.title) %></a><br />
<span class="grey small"><span> <%= feed_from(feed.title) %></span> — <span><%= feed.pubDate.to_date %></span></span></li>
<% end %>
</ul>
上面第二個(gè) partial 顯示的結(jié)果 for 循環(huán) 輸出 后的 加上 rails 約定的partial collection 循環(huán)輸出了。。結(jié)果重復(fù)。。做的過程中還遇到 partial collection empty 這個(gè)異常
原因是 feed_collection("hot").items 返回的結(jié)果不是一個(gè) collection..
正確的寫法:
partial : _feednews.html.erb
<div><%= render :partial => 'shared/feednews_item',:collection => feed_collection("hot").items %></div>
partial : _feednews_item.html.erb
<ul>
<% unless feednews_item.nil? %>
<li class="news"><a href="<%= feed_link(feednews_item.link) %>" target="_blank"><%= feed_title(feednews_item.title) %></a><br />
<span class="grey small"><span> <%= feed_from(feednews_item.title) %></span> — <span><%= feednews_item.pubDate.to_date %></span></span></li>
<% end %>
</ul>
從上面的prtial中可以看出 變量 是feednews_item 也就是partial的名字
總結(jié),一句話,如果 你在 partial 中 傳了 collection ,那么 就用 partial的名字 作變量輸出, 不需要 迭代, 如果 沒有 傳collection , 那么 就需要 迭代輸出!
posted on 2009-08-17 18:21
fl1429 閱讀(1170)
評(píng)論(0) 編輯 收藏 所屬分類:
Rails