Ruby on rails 从公共库调用方法-Rails

Ruby on rails 从公共库调用方法-Rails,ruby-on-rails,Ruby On Rails,在我的lib/assets中,我有一个gloabl_helper.rb,其中包含以下内容: Windows 8.1 Ruby 2.0.0 Rails 4.1 在我看来,我有以下几点: def current_user_is_admin if current_user.try(:role?) if current_user.role == 'admin' return TRUE end end return 0 end 当我尝试运行应用程序时,会收到

在我的lib/assets中,我有一个gloabl_helper.rb,其中包含以下内容:

Windows 8.1
Ruby 2.0.0
Rails 4.1
在我看来,我有以下几点:

def current_user_is_admin
  if current_user.try(:role?)
    if current_user.role == 'admin'
      return TRUE
    end
  end
  return 0
end

当我尝试运行应用程序时,会收到以下错误消息:

<% if current_user_is_admin == TRUE %>
<% end %>
未定义的局部变量或方法“当前用户是管理员”#
这是铁路的变化吗?我知道我应该在helper脚本中放置helper方法,但是一些helper是全局应用的,应该在lib/assets文件夹中。有什么想法吗?

  • 为什么有一个
    TRUE
  • 为什么存在
    0
  • 您不需要
    config.autoload_paths+=Dir[“#{config.root}/lib/**/”
  • 什么是“助手”?模块
  • 你把“助手”包括进去了吗
  • 当前用户
    不是全局可用的。它已混合到您的
    应用程序控制器中
编写表意ruby代码

undefined local variable or method `current_user_is_admin' for #<#<Class:0x0000000667deb8>:0x00000004fef818>

1.你为什么不把它放在
app/helpers/application\u helper.rb
?2.如果你坚持,你是否确保
lib/assets
由Rails自动加载(为什么是assets?)?3.您仍然需要将当前_用户传递到此方法,除非您在我使用Deviate的
ApplicationController
中定义它,这样当前_用户是全局可用的。但是,我确实忘记了在application.rb中包含lib和lib/assets,如下所示:config.autoload_paths+=%W(#{config.root}/lib)config.autoload_paths+=Dir[”#{config.root}/lib/**/“]显然,这不起作用(自动加载)…我发布的实际方法代码是在我试验了一段时间后发布的,因此这不是主要问题。Helper是一个模块,不,我没有将其包含在应用程序控制器中,因为我认为如果它是自动加载的,这不是必需的。我不确定我是否理解您所说的当前用户不是全局可用的。我认为它是可用的e从每个控制器/视图/模型。将文件包含在应用程序控制器中可解决未定义的方法或变量错误
自动加载路径中的所有文件均已“加载”对于您的rails应用程序,rails将在开发过程中重新加载它们,仅此而已。如果您有想要使用的功能,则需要对其进行处理,例如将其包含到类中。这也是我所说的“不全局可用”的意思,即您的模型中没有这些方法,因为它们包含在应用程序控制器中
def current_admin?
  return unless logged_in?
  current_user.role == 'admin'
end