如何访问模型中的 current_user 对象?
How to access current_user object in model?
我正在尝试在我的 "team" 模型中编写方法,但 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 。这似乎是一个简单的任务,但我不明白错误在哪里。如果有人帮助我,我将非常感激。
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
现在我们可以轻松地在任何模型中获取 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= 分配当前用户。
谢谢
我正在尝试在我的 "team" 模型中编写方法,但 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 。这似乎是一个简单的任务,但我不明白错误在哪里。如果有人帮助我,我将非常感激。
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
现在我们可以轻松地在任何模型中获取 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= 分配当前用户。
谢谢