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

时间:2015-03-02 07:22:30

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

我正在尝试在我的“团队”模型中编写一个方法,但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。这似乎是一项简单的任务,但我不明白故障所在。如果有人帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:16)

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

希望这有帮助!

答案 1 :(得分:1)

如果您只使用它一次,那么在调用此方法时,将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

现在,我们不仅可以在Team

中轻松获取任何模型中的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 =分配当前用户。

由于