Rails /设计在模型中访问的current_user但它是零

时间:2013-09-01 19:34:51

标签: ruby-on-rails model-view-controller model devise controller

我需要访问另一个模型中的 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?

这有什么解决方法吗?需要编辑问题的标题。

1 个答案:

答案 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