【问题标题】:Uninitialized constant Post in rails console, following tutorialRails 控制台中未初始化的常量 Post,遵循教程
【发布时间】:2017-06-02 10:04:48
【问题描述】:

所以我正在关注本教程,并且我已经三次检查了到目前为止我所做的一切都是正确的。教程:https://www.youtube.com/watch?v=0OzDgi0zqJU

在视频的开头,他要我启动 rails 控制台并输入“Post.all”。当他的终端显示一个空数组时,我收到了这个错误(如下)。

EIERs-MBP:training eier$ rails c
Running via Spring preloader in process 75415
Loading development environment (Rails 5.0.1)
2.3.0 :001 > Post.all
NameError: uninitialized constant Post
from (irb):1
from /Users/eier/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
from /Users/eier/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
from /Users/eier/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
from /Users/eier/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/eier/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
from /Users/eier/Documents/Workspace/rails/training/bin/rails:9:in `<top (required)>'
from /Users/eier/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/eier/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from -e:1:in `<main>'

我到处寻找可能是什么的答案,我不知道是不是因为我正在使用的 rails 版本。这是一个非常简单的教程,所以真的很令人沮丧。我们假设使用 Post.create(title: "first post", content: "test") 在 Rails 控制台中创建内容,但是在输入“Post.all”时我遇到了错误。

这是 posts_controller.rb 文件:

class PostsController < ApplicationController
 def index

 end
end

这也是他的文件以及我们创建的所有其他文件(例如 index.html.erb 和路由)的外观。如果我需要提供更多信息,请告诉我。

【问题讨论】:

  • 你有模特帖子吗,app/models/post.rb
  • 你迁移数据库了吗?
  • @Sravan 我们还没有创建模型,我相信它在教程的后续步骤中。如果他不向我们展示这一点并继续这样做会很奇怪,但也许他这样做了。
  • @TimmyVonHeiss 我们在教程中还没有走到这一步。我们只设置了一个路由(get '/posts' => 'posts#index'),创建了一个控制器(posts_controller.rb)和一个视图文件views/posts/index.html.erb
  • 我刚刚查看了教程。奇怪的是,它实际上是从控制器开始并在明确讨论如何创建它之前使用模型。我认为该教程更多地是关于路线,而不是关于整个轨道。

标签: ruby-on-rails ruby rails-console


【解决方案1】:

首先使用命令创建模型Post

rails generate model Post title:string text:text

这将创建app/models/post.rbdb/migrate 中的迁移文件

现在,如果您已经拥有数据库,请运行迁移。

rails db:migrate

现在,表已创建。

现在打开rails console/rails c

Post.all

【讨论】:

  • 谢谢!在@Glyoko 注意到他跳过了教程中的模型部分后,我想通了。我对 Rails 还是很陌生,所以即使我已经学会了如何生成模型和迁移数据库,我也会从字面上学习每一个教程。再次感谢。
【解决方案2】:

您的 posts_controller.rb 与它无关。检查您的 app/models/post.rb 是否定义

class Post < ApplicationRecord # sometimes "< ActiveRecord::Base" instead
end

当你输入Post.all 时,ruby 会尝试查找一个名为Post 的类——你的模型——并在其上调用all 方法。如果它在错误中显示uninitialized constant Post,那么您的帖子模型一定不能定义。

【讨论】:

  • 啊,我明白了!现在发生了一些事情,但我遇到了一个新错误。 2.3.0 :001 > Post.all Post Load (0.6ms) SELECT "posts".* FROM "posts" ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: posts: SELECT "posts".* FROM "posts "
  • 看起来你的教程更多的是关于创建路线而不是作为一个整体的学习轨道。如果你想学习 Rails,我会推荐 youtube.com/watch?v=nRyUn7D8zCc。前几个视频是关于安装和基础知识的,但如果您想大致了解一下您现在所处的位置,请跳到第 4 部分。不过,如果您是 Ruby 新手,我建议您回顾一下基础知识。
  • 我现在明白了,感谢您为我解决这个问题。我刚刚运行 rails generate model post title: content: 并迁移了数据库。现在我又走上了正轨,谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2018-03-27
  • 2013-11-18
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多