2017-05-05 119 views
-1

我的頁面控制器具有此代碼:如何將鏈接添加到頁面動態地在Rails中

class PagesController < ApplicationController 

    def index 
    @pages = Page.all 
    end 

    def new 
    @page = Page.new 
    end 

    def edit 
    @page = Page.find(params[:id]) 
    end 

    def create 
    @page = Page.new(page_params) 
    @page.save 
    redirect_to @page 
    end 

    def update 
    @page = Page.find(params[:id]) 
    @page.update(page_params) 
    redirect_to @page 
    end 

    def show 
    @page = Page.find(params[:id]) 
    end 

    def destroy 
    @page = Page.find(params[:id]) 
    @page.destroy 
    redirect_to pages_path 
    end 


    private 
    def page_params 
    params.require(:page).permit(:title,:description) 
    end 

end 

而在我的導航欄我有這樣的代碼:

<% @pages.each do |page| %> 
     <li?<%= link_to 'page.title', page_path(page)%></li> 
    <% end %> 

代碼應生成每個標題頁面創建,但是當我運行該頁面時出現以下錯誤:

undefined method `each' for nil:NilClass 

我以爲我通過enteri消除了此問題在PagesController中新函數內的代碼。此頁面控制器僅用於其他頁面。導航欄還包含指向靜態頁面的鏈接,因此導航欄中應該總是有一些值。

有沒有人有任何建議?

+0

它是否適用於'index',但不適用於'show'。或者,它無法工作? – jvillian

+0

它不在導航欄中工作。我有一個單獨的頁面,用戶可以創建讀取更新和銷燬頁面。此功能在那裏工作,但不在導航欄中 – Sandra123

+0

當導航欄引發錯誤時,會調用什麼控制器/操作? – jvillian

回答

0

試試這個:

application_controller.rb

@pages = Page.all 

,並在您導航欄添加此

<% @pages.each do |page| %> 
    <li><%= link_to "#{page.title}", page_path(page)%></li> 
<% end %> 
+0

謝謝!這炒鍋。我沒有將@pages = Page.all添加到application_controller.rb非常感謝你 – Sandra123

+0

這樣做意味着每個Web請求都會將所有頁面加載到內存中。正確的方法是將'@ pages'設置爲需要'@ pages'填充的控制器中的before_filter(Rails 5中的before_action)。 – scarver2

+0

@ scarver2是的,但他需要在那裏,因爲他希望所有頁面都可以在每個視圖中出現的主導航欄中使用。我不知道他爲什麼需要它,但是,對於每個請求,將所有頁面加載到內存中並不好。 – amrrbakry

-2

聽起來您的Page表中沒有任何頁面。確保你已經用一些頁面填充了這張表。

您也可以將代碼包裝在unless子句中,以檢查@pages是否爲零。

例如:

<% unless @pages.nil? %> 
    <% @pages.each do |page| %> 
     <li?<%= link_to 'page.title', page_path(page)%></li> 
    <% end %> 
<% end %> 
相關問題