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

我试图在我的“团队”模型中编写一个方法,但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 

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 

现在,我们不仅可以在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 =以分配当前用户。

谢谢