Ruby on rails 从公共库调用方法-Rails
在我的lib/assets中,我有一个gloabl_helper.rb,其中包含以下内容: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 当我尝试运行应用程序时,会收到
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/**/”
- 什么是“助手”?模块
- 你把“助手”包括进去了吗
不是全局可用的。它已混合到您的当前用户
应用程序控制器中
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