2016-05-12 19 views
0

我正在使用Rails 4.2.3。我想有我管理登錄頁面上的標籤菜單,所以我增加了以下我的應用程序/控制器/ admin_controller.rb文件...即使我在我的控制器中定義了一個未定義的方法

class AdminController < ApplicationController 
    before_filter :must_be_admin, only: :index 

    def index 
    @page_id = "index" 
    end 

    def menu_builder(page_id) 
    tabs = ['Current Hacks','Add New Hack','Approve Hacks'] 
    content = "" 
    tabs.each do |tab| 
     content << if page_id == tab 
     content_tag('li', content_tag('a', tab, :href => nil), :class => 'current') + " " 
     else 
     content_tag('li', content_tag('a', tab, :href => "/#{tab}")) + " " 
     end 
    end 
    content 
    end 

以下是我在我的應用程序/視圖/管理/指數.html.erb文件...

<h1>Admin#index</h1> 
<ul> 
    <%= menu_builder(@page_id) %> 
</ul> 

然而,當我訪問我的/管理/索引頁,我得到這個錯誤

undefined method `menu_builder' for #<#<Class:0x007f861bfe9900>:0x007f861bff36f8> 

我要去哪裏錯了?

+0

方法來創建視圖llers實際上是動作,所以你無法在控制器中定義一個傳遞參數的方法。你需要一個'menu_builder(page_id)'助手' –

回答

0

對於在視圖中可用的導軌方法,您必須將其定義在helpers不在控制器中。

例如

admin_helper.rb 

    def menu_builder(page_id) 
    ###definition 
    end 

所以現在,這種方法可以在任何視圖中被稱爲內admins/admins_controller.rb 來,但如果你希望它是提供給所有的意見,則必須在application_helper.rb添加它

0

嘿,它正在尋找這個方法在它的幫手。在助手中定義該方法,然後將其稱爲視圖。您無法從視圖中調用控制器方法..

+0

你可以使用':helper_method'來將它定義爲視圖可用 –

0

請將menu_builder方法添加到AdminHelper(app/helpers/admin_helper.rb)。否則,將menu_builder方法添加到其他幫助程序,並將該幫助程序包含在您的AdminController中。在AdminHelper中最好有menu_builder方法。

控制器中的方法通常用於「動作」,通常必須通過路徑進行定義和消耗。

0

剛剛從控制器移動方法的任何幫助,也許applicaiton_helper那麼你就能夠在你需要CONTRO定義

相關問題