轨道/ CURRENT_USER设计模型访问,但它是零(Rails/devise current_u

2019-11-02 10:45发布

我需要访问CURRENT_USER在我的另一种模式。 我用Google搜索,发现了几个解决方案,并试图此 。

但是,只有一个区别:我没有设置User.current_user控制器。 为什么?

就像在回答我跟着我不是将数据添加到我的意见,从第二个模型,但通过通过一个URL来呈现数据(用开放的URI,这是CSV数据我取)。
所以在我的第二个模型我做的:

Person.create(username: User.current_user.username)  

它给:

NoMethodError:未定义的方法`用户名”的零:NilClass

这是不工作(这是显而易见的我猜的)。 在控制台当我做User.current_user它表明:

1.9.3p448:002> User.current_user
=>无

我想,为什么不工作是因为我直接从模型和模型访问User.current_user,除非它被赋予的是不能得到的CURRENT_USER。 (对?)

但是,如果我通过登录页面访问这肯定会工作,并在控制器中设置的User.current_user。

但正如我直接从URL获取数据我直接在模型本身我一个人的模型制作新的条目。

那么,如何设置User.current_user?

对此有什么解决办法? 编辑对这个问题的标题是必需的。

Answer 1:

current_user默认被作为内制订一个辅助方法。 从文档 :

# For the current signed-in user, this helper is available:
current_user

current_user不通过模型本身直接访问,而是,虽然设计模块,查找该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


文章来源: Rails/devise current_user accessed in model but it's nil