我需要访问另一个模型中的 current_user 。我用Google搜索并找到了一些解决方案并尝试了this。
但只有一个区别:我没有在控制器中设置 User.current_user 。 为什么?
就像我回答的那样我不会从视图中向我的第二个模型添加数据,而是通过url渲染数据(使用open-uri,它是我正在提取的csv数据)。
所以在我的第二个模型中我做了:
Person.create(username: User.current_user.username)
它给出了:
NoMethodError:nil的未定义方法`username':NilClass
哪个不起作用(我猜这很明显)。在我做User.current_user的控制台中,它显示:
1.9.3p448:002> User.current_user
=>零
我认为为什么它不起作用是因为我直接从模型和模型访问 User.current_user 无法获取current_user,除非给出它。 (右?)
但如果我通过登录页面访问它并在控制器中设置User.current_user,这肯定会有效。
但是,由于我直接从网址获取数据,我直接在模型中为我的Person模型创建新条目。
那么如何设置User.current_user?
这有什么解决方法吗?需要编辑问题的标题。
答案 0 :(得分:1)
current_user
可用作Devise中的辅助方法。来自the documentation:
# For the current signed-in user, this helper is available:
current_user
current_user
本身不是直接通过模型访问的,而是通过Devise模块访问,该模块查找登录到当前会话的User
对象,然后返回到current_user
。
因此,不会通过User.current_user
访问当前用户(current_user
上没有User
方法,正如错误消息所示)。您只需在控制器或视图中调用current_user
辅助方法即可访问它。
<强>更新强>:
建议您将控制器和模型层分开。执行您提议的一种方法是在Person
模型上创建一个类函数,其中您从控制器中明确传递username
User
对象:
# in your controller
Person.create_with_username(:username => current_user.username)
# app/models/person.rb
def self.create_with_username(username)
self.create(username)
end