ruby-on-rails - 类型错误 : Books is not a class

标签 ruby-on-rails ruby database-migration

这是我第一次尝试在 Rails 项目上制作 ruby​​,我对 migrate 命令很费劲。

我遵循了本教程 tutorial . 当我尝试使用迁移时:rake db:migrate 我收到此错误:

rake aborted!
TypeError: Books is not a class
/home/dudi/tutorials/books/db/migrate/20150227191301_books.rb:1:in `<top (required)>'
TypeError: Books is not a class
/home/dudi/tutorials/books/db/migrate/20150227191301_books.rb:1:in `<top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

但是文件说 Books 是一个类:

class Books < ActiveRecord::Migration
  def self.up
     create_table :books do |t|
    t.column :title, :string, :limit => 32, :null => false
    t.column :price, :float
    t.column :subject_id, :integer
    t.column :description, :text
    t.column :created_at, :timestamp
     end
  end

  def self.down
    drop_table :books
  end
end

我在这里做错了什么?


编辑:

我尝试将 class Book 更改为 class create_Book 并将文件名更改为 create_Book。当我输入 rake db:migrate 时,没有任何反应(我猜它起作用了?),在网页上我收到了这条消息:

Couldn't find Book with 'id'=all

在文件 book_controller 上:

class BookController < ApplicationController

 #printout of all the books in the database
 def list
   @books = Book.find(:all) 
 end
end

我还尝试将 Book.find 更改为 create_Book.find 我遇到了这个错误:

undefined local variable or method `create_Book'

最佳答案

首先,您是否希望 Books 能够将数据存储在数据库中?因为您在该迁移中有一个 drop_table 行。这意味着您将创建表,然后将其删除。

其次,rake db:migrate 是最后一步。您是否在本教程中使用了命令“rails generate model”?或者您是否尝试先运行迁移? (注意 rails generate model 也会自动为你生成迁移文件)

您需要先创建一个名为 Books 的模型,然后才能运行迁移。您收到的错误是在您的模型中寻找 Books 类,但找不到。

如果您的模型中已经有 Books 类,请编辑它以包含该文件。如果我们可以看到您的实际模型,而不仅仅是迁移,这将为我们提供有关为什么 Rails 认为那里没有 Books 模型的信息。

您的 Books 模型应该继承自 ActiveRecord::Base 或继承自另一个继承自 ActiveRecord::Base 的类。是这样吗?

关于ruby-on-rails - 类型错误 : Books is not a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28772959/

相关文章:

mysql - 根据开始日期对事件进行排序

ruby-on-rails - Rails 设计 - Facebook + Twitter +

ruby-on-rails - 在 OS X Yosemite 上修复 Ruby

ruby - 将空格打印并显示为字符

scala - 关注 Play 的演变?

ruby-on-rails - 如何计算数组中具有特定属性值的项目?

ruby-on-rails - 在 Rails 中测试参数的最佳方法是什么?

mysql - 选择偏移量 > 0 的最大值返回 nil

django - 关闭 Django 中的迁移

node.js - NodeJS Sequelize 中真的需要迁移吗?