【问题标题】:Access user properties through a helper method in rails通过 rails 中的辅助方法访问用户属性
【发布时间】:2013-09-27 03:21:58
【问题描述】:

我写了这个辅助方法:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
  helper_method :current_user
end

在我看来,我应该能够做到current_user.role == 'some role',但是当我这样做时,它会说“nil:NilClass 的未定义方法角色”现在是否意味着角色列是空的并且什么都没有在或者用户对象是空的?因为我向您保证我已登录,我存在于数据库中,并且....数据库中的角色字段始终为空。

更新 我可能应该声明User.role == 'admin' 有效,因为它们是数据库或井列中的角色属性。为什么我不能在 current_user 上做 .role?

【问题讨论】:

  • 该消息意味着current_user 正在返回nil。你是如何处理登录的?

标签: ruby-on-rails ruby session ruby-on-rails-4


【解决方案1】:

基于此错误,您可以确定 current_user 返回值 nil。所以问题不在于方法角色。您应该注意 User.role 是模型 User 上的一个类方法,因此它不会调用某个特定用户的方法。另一方面,current_user.role 是一个特定用户的实例方法,即已登录的用户。

我会将以下内容放在引发错误的方法上方:

raise session[:user_id].inspect

在使用上述方法确认会话 cookie 中存在适当的 user_id 后,您还可以在 current_user 辅助方法的末尾添加以下内容,以确认实际正在返回用户:

raise @current_user.inspect 

您用于创建会话[:user_id] 的逻辑是什么?此外,您可能需要清除浏览器缓存或打开隐身窗口(在 chrome 中为 cmd + shift + n)并返回应用程序的登录过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多