我在rails应用程序中使用rails generate migrations命令创建了一个表.这是迁移文件:
class CreateListings < ActiveRecord::Migration
def change
create_table :listings do |t|
t.string :name
t.string :telephone
t.string :latitude
t.string :longitude
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后我想将纬度和经度存储为整数,所以我试图运行:
rails generate migration changeColumnType
Run Code Online (Sandbox Code Playgroud)
并且该文件的内容是:
class ChangeColumnType < ActiveRecord::Migration
def up
#change latitude columntype from string to integertype
change_column :listings, :latitude, :integer
change_column :listings, :longitude, :integer
#change longitude columntype from string to integer type
end
def down
end
end
Run Code Online (Sandbox Code Playgroud)
我期待列类型改变但是rake被中止并且出现以下错误消息.我想知道为什么这不通过?我在我的应用程序中使用postgresql.
rake db:migrate
== ChangeColumnType: migrating ===============================================
-- change_column(:listings, :latitude, :integer)
rake aborted!
An error …Run Code Online (Sandbox Code Playgroud) 是否可以在Postgres中创建代数数据类型,然后将其用作列类型?
例如:
CREATE TYPE hoofed AS ENUM('horse', 'goat');
CREATE TYPE monkey AS ENUM('chimp','macaque');
CREATE TYPE ANIMAL AS ENUM(hoofed, monkey);
Run Code Online (Sandbox Code Playgroud)
这失败了:
syntax error at or near "hoofed"
LINE 1: CREATE TYPE ANIMAL AS ENUM(hoofed, monkey);
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?
最终,我希望能够做到的是这样的事情:
CREATE TABLE zoo (
a ANIMAL,
name text
);
INSERT INTO zoo(a, name) VALUES('horse', 'bob');
INSERT INTO zoo(a, name) VALUES('macaque', 'jimmy');
Run Code Online (Sandbox Code Playgroud)
并且两个记录都是独立有效的.
编辑:@ Abihabi87下面的回复确实允许我创建一个实际的产品类型,但它仍然不允许我根据需要创建一个联合类型.