2016-05-12 3 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

метод, определенных в Contro 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

Вы не можете использовать действия контроллера прямо в своих представлениях (они вызываются из маршрутов через HTTP-запросы).

Вам нужен метод menu_builder, который будет определен в модуле AdminHelper, а затем вызовите helper AdminHelper в AdminController.

Для получения дополнительной информации см. http://api.rubyonrails.org/classes/ActionController/Helpers.html.

0

Эй, он ищет этот метод в своем помощнике. определите этот метод в помощнике, а затем вызовите его в виде. Вы не можете вызывать методы контроллера с точки зрения ..

+0

Вы можете использовать ': helper_method', чтобы определить его как пригодный для просмотра –

0

Пожалуйста, добавьте menu_builder метод AdminHelper (приложение/хелперы/admin_helper.rb). В противном случае добавьте метод menu_builder к другому помощнику и включите этот помощник в свой AdminController. Предпочтительно иметь метод menu_builder в AdminHelper.

Методы в контроллере, обычно предназначенные для «действий», как правило, должны определяться и потребляться через маршруты.

0

Просто переместите метод от контроллера к любому помощнику может быть applicaiton_helper, то вы можете создать вид вам нужны

Смежные вопросы