我在SitePoint中关注此tutorial以将模型属性设置为Enum值,自4.1起Rails支持该值。
而不是性别枚举,我正在尝试添加季节枚举。
这是我在public IReadOnlyCollection<IWebElement> GetVisibleElements(By locator)
{
return Driver.FindElements(locator).Where(e => e.Displayed).ToList();
}
schema.db
这是我的# Could not dump table "semesters" because of following StandardError
# Unknown type 'season' for column 'season'
:
migration
我的class AddSeasonToSemesters < ActiveRecord::Migration[5.1]
def up
execute <<-SQL
CREATE TYPE season AS ENUM ('fall', 'winter', 'spring', 'summer');
SQL
add_column :semesters, :season, :season, index: true
end
def down
remove_column :semesters, :season
execute <<-SQL
DROP TYPE season;
SQL
end
end
文件:
model
知道我做错了什么吗?任何方向都将不胜感激,谢谢。
答案 0 :(得分:2)
您需要从db/schema.rb
切换到db/structure.sql
。
潜在的问题是schema.rb
是ActiveRecord看到它的数据库结构的表示,但ActiveRecord不理解很多东西(例如create type
,CHECK约束和其他东西在PostgreSQL中出现在迁移中的execute some_raw_sql
语句中。你可以create type
想要schema.rb
,但db/structure.sql
永远不会看到它。
如果您想使用ActiveRecord不理解的东西,那么您必须使用structure.sql
来存储数据库的结构。 config/application.rb
存储数据库的结构,因为数据库理解它,而不是ActiveRecord理解它。
切换很简单:
config.active_record.schema_format = :sql
以包含rake db:structure:dump
。db/structure.sql
获取初始db/schema.rb
。db/structure.sql
。db:structure:dump
添加到版本控制。db:schema:dump
代替db:structure:load
db:schema:load
代替enum
那就是说,我不确定PostgreSQL的原生COPY table FROM '/home/folder1/a.csv' WITH DELIMITER=',' AND HEADER=FALSE;
类型与ActiveRecord的交互程度有多好,因为我从未这样做过。 AR's enum
s是字符串和整数之间的客户端转换,但PostgreSQL's enum
s在数据库内处理,并且彼此不了解。可能存在冲突,您需要确保彼此保持同步。