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