TypeError:Books不是一个类

时间:2015-02-27 19:37:03

标签: 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'

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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