2011-08-21 133 views
0

我很抱歉我的英語不好。我只是試圖描述我的問題。 :) 我有一個應用程序佈局,有一個產量顯示職位在體內。我有另一個yield:footerpost3用於在頁腳上顯示最近帖子的標題。Ruby on Rails 3:玩意

當我在localhost:3000時,yield:footerpost3正確顯示最近的標題。但是當我點擊一個帖子鏈接,這是url是localhost:3000/posts/3,yield:footerpost3什麼都不顯示。

這裏是我的代碼: 應用程序/視圖/佈局/ application.html.erb

<!-- begin footer comment widget --> 
    <div class="footer_list widget_recent_comments"> 
    <div class="title"><h5>Artikel Terkini</h5></div> 
     <%= yield :footerpost3 %>    
    </div> 
<!-- end footer comment widget --> 

應用程序/視圖/存儲/ index.html.erb

<% content_for :footerpost3 do %> 
    <% @postsMain.each do |dopostAll| %> 
     <div class="entry"> 
      <ul> 
       <li class="recentcomments"><%= link_to dopostAll.title, dopostAll %></li> 
      </ul> 
     </div>       
    <% end %> 
<% end %> 

我希望我的問題很容易理解.. :)

回答

0

看起來像你的根網址是stores#index。 您必須在stores#index操作中初始化@postsMain並在stores/index.html.erb中生成content_for footerpost3

當你點擊一個帖子,你將被帶到posts#show page。所以,你必須即使在posts#show行動初始化@postsMain和生成,即使在posts/show.html.erb

0

答案就在你的問題。您正在定義該塊中的「footerpost3的內容」,它存在於index.html.erb中。當你在/posts/3時,index.html.erb沒有被渲染,而是show.html.erb是。

要解決這個問題,您還需要在show.html.erb模板中添加內容。

您可以通過多種方式解決此問題。使用嵌套佈局將是一個。例如,你可能app/views/layout/posts.html.erb創建一個帖子佈局,像這樣:

<% content_for :footerpost3 do %> 
    <% @postsMain.each do |dopostAll| %> 
     <div class="entry"> 
      <ul> 
       <li class="recentcomments"><%= link_to dopostAll.title, dopostAll %></li> 
      </ul> 
     </div>       
    <% end %> 
<% end %> 

<%= render :file => 'layouts/application' %> 

這樣一來,你的PostsController將使用此佈局,這只是增加了您的頁腳內容的所有意見,然後才呈現application_layout。

+0

footerpost3的內容,所以我必須插入一個 <%=渲染:文件=>在每一個「佈局/應用程序」%> 代碼中的另一個看法? 有沒有簡單的方法?像應用程序幫手?老實說,我不明白應用幫手:) – mamatozay

+0

不是每個視圖。這個例子顯示了你如何使用佈局來做到這一點。您的所有帖子視圖(索引,顯示,新建,編輯)將自動在此佈局中呈現。所以你只能把它放在一個地方。訣竅是你必須確保所有在這個佈局內渲染的視圖都定義了@ postsMain,否則它們會被破壞。 – numbers1311407

+0

感謝您的幫助。 我知道明白了。 – mamatozay