未定义的局部变量或方法`current_user'使用devise&rails 3.2

tec*_*ams 5 ruby ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-4

我试图在我的"团队"模型中编写一个方法,但current_user显示此错误

未定义的局部变量或方法`current_user'for#

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
Run Code Online (Sandbox Code Playgroud)

current_user方法适用于其他模型和控制器.我这样称呼这个方法.

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

我使用rails 3.2,ruby 1.9.3和设计3.1.这似乎是一项简单的任务,但我不明白故障所在.如果有人帮助我,我会非常感激.

Raj*_*ngh 17

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

在您的应用程序控制器

before_filter :set_current_user

def set_current_user
  Team.current_user = current_user
end
Run Code Online (Sandbox Code Playgroud)

在你的Team模型中添加这一行

cattr_accessor :current_user
Run Code Online (Sandbox Code Playgroud)

恭喜,现在current_user可以在每个型号中使用,以使当前用户在任何地方使用以下行

Team.current_user
Run Code Online (Sandbox Code Playgroud)

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

现在在您的问题中,您可以使用它

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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!