未定义的局部变量或使用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 =以分配当前用户。
谢谢