在 ruby on rails 中创建新表
Posted
技术标签:
【中文标题】在 ruby on rails 中创建新表【英文标题】:Create new Table in ruby on rails 【发布时间】:2013-04-29 14:51:03 【问题描述】:我尝试在 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"
^
我做错了什么?
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】:正如其他人所说,:auto-generated
不是受支持的列类型。此外,它不是一个符号,它是一个表达式,它被解析为:auto - generated
。
【讨论】:
【参考方案3】:不要在您对 rails 生成器的命令行调用中使用逗号,这就是在迁移中使用逗号的原因。
【讨论】:
以上是关于在 ruby on rails 中创建新表的主要内容,如果未能解决你的问题,请参考以下文章