undefined局部变量或方法`authenticate_admin'

时间:2012-05-28 19:44:27

标签: ruby-on-rails ruby-on-rails-3

我正在尝试在我的博客控制器中查看我的新操作,但我不断收到以下错误消息:

NameError in BlogsController#new
undefined local variable or method `authenticate_admin'

在我的博客控制器中,我想将新操作仅限制为管理员(管理员和用户是两种不同的模型)。我能够在另一个模型中使用它。如果我没有弄错的话,帮助者对所有班级都开放。我还尝试将我的管理员助手中的代码添加到博客助手中,但这不起作用。

为什么我的博客控制器无法使用我的authenticate_admin方法?

感谢lookign:)

以下是相关文件:

blogs_controller.rb

class BlogsController < ApplicationController
before_filter :authenticate_admin, :only => [:new]

  def new
    @blog = Blog.new
    @title = "New Article"
  end
end

admins_helper.rb

def authenticate_admin
  deny_admin_access unless admin_signed_in?
end 

def deny_admin_access
  redirect_to admin_login_url, :notice => "Please sign in as admin to access this page."
end

def admin_signed_in?
  !current_admin.nil?
end

def current_admin
   @current_admin ||= Admin.find(session[:admin_id]) if session[:admin_id]
end

1 个答案:

答案 0 :(得分:3)

在这种情况下Helpers可以访问Views,而不是Controllers

解决方案是将您的方法从 admins_helper.rb 移至ApplicationController并将其设置为helper_methods。您可以在ControllersViews

中访问它们

示例:

class ApplicationController < ActionController::Base

  # Helpers
  helper_method :authenticate_admin

  def authenticate_admin
    deny_admin_access unless admin_signed_in?
  end 

end

阅读有关helper_method的文档:

http://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html#method-i-helper_method