在Ruby on Rails中创建新的数据表

20

我尝试在Rails中创建一个新表。不幸的是,我找到并尝试的每个示例都没有成功...

目前为止,我尝试过以下方法:(我使用的Ruby版本是1.9,Rails版本是3.2.13)

在终端中创建一个新模型:

rails generate model content content_id:auto-generated, law_id:integer, parent_id:integer, titel:string, text:string, content:string, url:string

生成了以下代码:
class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.auto-generated, :content_id
      t.integer, :law_id
      t.integer, :parent_id
      t.string, :titel
      t.string, :text
      t.string, :content
      t.string :url

      t.timestamps
    end
  end
end

如果我尝试运行 rake db:migrate,会出现以下错误信息:
 syntax error, unexpected ',', expecting keyword_end
      t.auto-generated, :content_id
                       ^

如果我去掉“,”就会出现以下错误信息:

syntax error, unexpected tSYMBEG, expecting keyword_do or '{' or '('
      t.auto-generated :content_id
                        ^

我的研究还让我发现了这种创建表格的方法:

class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.auto-generated "content_id"
      t.integer "law_id"
      t.integer "parent_id"
      t.string "titel"
      t.string "text"
      t.string "content"
      t.string "url"

      t.timestamps
    end
  end
end

如果我尝试使用那个示例来排除数据库,我会收到以下错误消息:
syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
      t.auto-generated "content_id"
                        ^

我做错了什么?
3个回答

21

auto-generated不是受支持的列类型。

Active Record支持以下数据库列类型:

:binary
:boolean
:date
:datetime
:decimal
:float
:integer
:primary_key
:string
:text
:time
:timestamp

更多信息请参见http://guides.rubyonrails.org/migrations.html#supported-types

Rails会自动为您创建id列,因此只需编辑您的迁移文件如下:

class CreateContents < ActiveRecord::Migration
  def change
    create_table :contents do |t|
      t.integer "law_id"
      t.integer "parent_id"
      t.string "titel"
      t.string "text"
      t.string "content"
      t.string "url"

      t.timestamps
    end
  end
end

1
正如其他人所说,:auto-generated 不是受支持的列类型。此外,它不是一个 符号,而是一个 表达式,并且被解析为 :auto - generated

0

在调用Rails生成器时不要在命令行中加逗号,因为这会在迁移中添加逗号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接