2012-07-19 116 views
1

我想知道我怎麼可以在下列情況下Ruby on Rails的渲染

達到我的數據我有一個資源稱爲頁,它擁有所有可能的行動,並創造了在http://railscasts.com/episodes/117-semi-static-pages?autoplay=true提出了他的railscast瑞安大怒。現在我已經使用的佈局文件夾已跟隨

application.html.erb

_footer.html.erb 
_header.html.erb 

頁有一個固定鏈接,我想他們是在_footer部分,因此它可能是關於我們,條款與條件等等......

所以在這裏我做了什麼 application.html.erb

<%= render 'layouts/header' %> 
<div class="container"> 
<% flash.each do |key, value| %> 
<div class="alert alert-<%= key %>"><%= value %></div> 
<% end %> 
<%= yield %> 
<%= render 'layouts/footer' %> 
<%= debug(params) if Rails.env.development? %> 
</div> 

其中要求在佈局文件夾_footer這是_footer.html.erb

<footer class="footer"> 
<small> 
Copyright <%= Time.now.year %> 
</small> 
<nav><%= render "pages/link" %> 
<ol class="footer_pages"> 
</ol> 
</nav> 
</footer> 

該呼叫在頁/ _link.html.erb 此文件是文件

<li> 
<%= @pages.each do |page| %> 
<%= page.name %> 
<% end %> 
</li> 

在這點pages.each未初始化如果我是正確的,則不起作用因此,我在控制器applicationController中初始化了@pages = Page.all,因爲它是調用者。這個理論應該允許我閱讀它,但它仍然行不通!我做錯了什麼?

更新,因爲我不知道如何添加其他意見 的ApplicationController

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    include SessionsHelper 
@pages = Page.all 
end 
+1

首先,我跳出來的是你正在嘗試渲染來自@ pages.each的輸出,你不應該這樣做。使用'<% %>'作爲該行而不是'<%= %>'。否則,你真的看到了什麼錯誤? – DVG 2012-07-19 16:10:58

+0

謝謝你沒有看到它,NoMethodError,未定義的方法'each'for nil:NilClass,行代碼是<%@ pages.each do | page | %>在_link.html.erb – Jseb 2012-07-19 16:15:39

+0

顯示自你的'ApplicationController' – Chowlett 2012-07-19 16:15:56

回答

1

你可能需要在將設置@pages實例變量的ApplicationController到使用的before_filter。然後所有頁面都可以訪問這些數據。

事情是這樣的:

class ApplicationController < ActionController::Base 
    before_filter :pages 

    def pages 
    @pages = Page.all 
    end 

    ... 
end 
0

的問題是,當你呈現局部的,從你的控制器中的變量不傳遞給部分。換句話說,即使您在控制器中初始化它,部分從未聽說過@pages

嘗試傳遞變量@pages的部分是這樣的:

# page the partial is first called from 
<%= render 'layouts/footer', :locals => {:pages => @pages} %> 

# _footer.html.erb 
<%= render "pages/link", :locals => {:pages => pages} %> 

# _link.html.erb 
<li> 
<%= pages.each do |page| %> 
<%= page.name %> 
<% end %> 
</li> 

更多信息請參見http://guides.rubyonrails.org。 (渲染部分大約是頁面下的80%)