【问题标题】:NoMethodError in DocsController#new undefined method `docs' for nil:NilClassNoMethodError in DocsController#new undefined method `docs' for nil:NilClass
【发布时间】:2016-09-22 18:04:55
【问题描述】:

我正在尝试按照教程构建一个应用程序,例如 evernote 或 google docs,用户可以在其中存储文件。我正在尝试将用户与文档相关联,并且我希望当前用户创建一个新文档,并且我希望该文档具有该用户的 ID,并且在尝试创建新文档时出现此错误 DocsController 中的 NoMethodError#new nil:NilClass 的未定义方法“docs”

提取的源代码(第 13 行附近): 11 12 13 14 15 16

def new
    @doc = current_user.docs.build
end

def create

Rails.root:/Users/Hisham/Desktop/Rails_projects/cabinet

应用程序跟踪 |框架跟踪 |全跟踪 app/controllers/docs_controller.rb:13:in `new'

【问题讨论】:

  • 您能否将其改写为一个问题?目前尚不清楚您在寻求什么帮助。另外,你有教程的链接吗?这将是有用的额外信息。
  • 然后呢? current_user 的实现在哪里?
  • @doc = current_user.docs.build if current_user.present?
  • 确保您已登录,否则您将在current_user 中获得nil
  • current_user 是通过 Devise 或其他一些身份验证系统定义的。您的错误意味着当前用户实际上并未登录系统。在开始处理您的其他问题之前,您需要弄清楚为什么他们没有主动登录,一旦您让正确的用户登录,这似乎不会成为问题。

标签: ruby-on-rails ruby


【解决方案1】:

您可能会收到此错误,因为您没有登录,并且 current_user 等于 nil。您应该在此操作之前检查用户是否已登录并创建 callback。设计为您提供:

before_action :authenticate_user!   

你应该像这样在你的控制器中使用它:

before_action :authenticate_user!, only: [:new,:create]

【讨论】:

    【解决方案2】:

    修复你的设计,让current_user 成为现实。

    或者,您可以使用 rails 控制台并执行以下操作来确认该行。这假设您的数据库中有一个用户。

    bundle exec rails c
    u = User.first
    u.docs.build
    

    【讨论】:

    • 我如何让 current_user 在设计中成为一个东西?
    猜你喜欢
    • 2012-08-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2015-01-29
    • 1970-01-01
    • 2015-03-19
    • 2016-08-13
    相关资源
    最近更新 更多