如何访问模型中的 current_user 对象?

How to access current_user object in model?

我正在尝试在我的 "team" 模型中编写方法,但 current_user 显示此错误

#

的未定义局部变量或方法“current_user”
def set_default_url
  if current_user.id == self.user_id
    "/assets/default_black_:style_logo.jpg"
  else
    "/assets/default_:style_logo.jpg"
  end
end

方法 current_user 适用于其他模型和控制器。我是这样调用这个方法的。

has_attached_file :logo, :styles => { 
  :medium => "200x200#", 
  :thumb => "100x100#", 
  :small => "50x50#" 
}, 
:default_url => :set_default_url

我正在使用 rails 3.2 、 ruby 1.9.3 和设计 3.1 。这似乎是一个简单的任务,但我不明白错误在哪里。如果有人帮助我,我将非常感激。

current_user 在任何模型中都不可用,要在模型中访问 current_user,请执行此操作

在您的应用程序控制器中

before_filter :set_current_user

def set_current_user
  Team.current_user = current_user
end

在您的 Team 模型中添加此行

cattr_accessor :current_user

恭喜,现在每个模型都可以使用 current_user,要获取当前用户,只需在任何地方使用以下行

Team.current_user

注意:添加上述行后重启服务器!

现在在你的问题中你可以像这样使用它

def set_default_url
  if Team.current_user.id == self.user_id
    "/assets/default_black_:style_logo.jpg"
  else
    "/assets/default_:style_logo.jpg"
  end
end

希望对您有所帮助!

如果你只使用它一次而不是在调用此方法时将 current_user 作为参数传递给

has_attached_file :logo, :styles => { 
  :medium => "200x200#", 
  :thumb => "100x100#", 
  :small => "50x50#" 
}, 
:default_url => :set_default_url(current_user)

在模型中

def set_default_url(current_user)
  if current_user.id == self.user_id
    "/assets/default_black_:style_logo.jpg"
  else
    "/assets/default_:style_logo.jpg"
  end
end

如果您不想执行上述步骤,请按照以下步骤操作

转到用户模型

def self.current_user
  Thread.current[:user]
end

def self.current_user=(user)
  Thread.current[:user] = user
end

然后转到应用程序控制器

before_filter :set_current_user

def set_current_user
  User.current_user = current_user
end

现在我们可以轻松地在任何模型中获取 current_user,而不仅仅是在团队中

只需在您的代码中给出 User.current_user 所以

def set_default_url
  if User.current_user.id == self.user_id
    "/assets/default_black_:style_logo.jpg"
  else
    "/assets/default_:style_logo.jpg"
  end
end

所以好好利用它。

希望它能很好地解决您的问题。任意机型免费使用

User.current_user 获取当前用户 User.current_user= 分配当前用户。

谢谢