2015-11-28 46 views
0

我試圖巢SectionsPage在我的訓練代碼,我得到這個錯誤:NoMethodError在SectionsController#指數試圖巢

undefined method `sections' for nil:NilClass 

在此之前,我嵌套我在SubjectsPage成功。

看到下面的圖片中的錯誤試圖嵌套到頁面的章節。

Error

這裏是我做了什麼:

sections_controller.rb:

class SectionsController < ApplicationController 

    layout 'admin' 

    before_action :confirm_logged_in 
    before_action :find_page 

    def index 
    @sections = @page.sections.sorted 
    end 

    private 

    def find_page 
     if params[:page_id] 
     @page = Page.find(params[:page_id]) 
     end 
    end 
end 

筆者認爲:

index.html.erb:

<% @page_title = 'Sections' %> 

<%= link_to('<< Back to Pages', {:controller => 'pages', :action => 'index', :subject_id => @page.subject_id}, :class => 'back-link') %> 

<div class="sections index"> 
    <h2>Sections</h2> 

    <%= link_to('Add New Section', {:action => 'new', :page_id => @page.id, :page_id => @page.id}, :class => 'action new') %> 

    <table class="listing" summary="Section list"> 
    <tr class="header"> 
     <th>&nbsp;</th> 
     <th>Page</th> 
     <th>Section</th> 
     <th>Content Type</th> 
     <th>Visible</th> 
     <th>Actions</th> 
    </tr> 
    <% @sections.each do |section| %> 
    <tr> 
     <td><%= section.position %></td> 
     <td><%= section.page.name if section.page %></td> 
     <td><%= section.name %></td> 
     <td><%= section.content_type %></td> 
     <td class="center"><%= status_tag(section.visible) %></td> 
     <td class="actions"> 
     <%= link_to('Show', {:action => 'show', :id => section.id, :page_id => @page.id}, :class => 'action show') %> 
     <%= link_to('Edit', {:action => 'edit', :id => section.id, :page_id => @page.id}, :class => 'action edit') %> 
     <%= link_to('Delete', {:action => 'delete', :id => section.id, :page_id => @page.id}, :class => 'action delete') %> 
     </td> 
    </tr> 
    <% end %> 
    </table> 
</div> 
+0

從哪個頁面,你想調用你的分區控制器的'index'動作?即您在發生錯誤之前點擊的鏈接。你能告訴我們你的鏈接代碼嗎? –

+0

@SunnyK,我用這個URL直接調用它。 http://127.0.0.1:3000/sections –

+0

如果我刪除所有嵌套,它的作品。作爲CMS,我將部分嵌套到Page中,以便在CMS中只有相關記錄。讓我粘貼沒有嵌套的代碼,其中一旦我http://127.0.0.1:3000/sections –

回答

0

好吧,讓我們一步一步來;首先你導航到第指數的路線,這是該指數動作的代碼:

def index 
    @sections = @page.sections.sorted 
end 

你也有一個before_action :find_page是應該設置@page

def find_page 
    if params[:page_id] 
    @page = Page.find(params[:page_id]) 
    end 
end 

,但是這永遠不會發生因爲params[:page_id]或者沒有頁面包含您通過的ID。所以,@page是零,你打電話給nil.sections,你發佈的異常被觸發。

你如何通過page_id作爲url參數?

有沒有可能是你真正打算在路線是這樣的:

resources :pages do 
    resources :sections 
end 

如果是的話,正確的部分指標路線是這樣的:

page_sections GET /pages/:page_id sections(.:format) sections#index 
+0

很好的見解。 http://127.0.0.1:3000/sections?page_id=2確實工作並填充了我的部分頁面。但我仍然會喜歡http://127.0.0.1:3000/sections功能。 這是我在我的route.rb中的所有內容 get'admin',:to =>'access#index' match':controller(/:action(/:id))',:via => [ :get,:post] –

+0

你有一個解決方案,但我仍然不能得到解決方案在這裏工作 –

+0

請寫你嘗試了什麼,錯誤是什麼。你有沒有改變路線? – bosskovic