B S*_*ven 21 postgresql enums ruby-on-rails database-migration ruby-on-rails-3
PostgreSQL具有内置于数据库中的枚举类型的概念.
如何实现一个包含在Rails 3中使用枚举类型的列的表?你需要以某种方式在PostgreSQL中定义枚举吗?你怎么能创建一个这样做的数据库迁移?
使用Rails 3.07,Ruby 1.92p180,PostgreSQL 8.3.
rdv*_*ijk 13
Rails不支持ENUM
开箱即用的数据类型.这是因为并非所有数据库都支持该数据类型.我发现处理ENUM
值的常用方法是在数据库中手动创建枚举列(在您的情况下为PostgreSQL),并将其作为string
Rails应用程序中的列处理.然后,使用validates_inclusion_of验证程序强制使用允许的值.
validates_inclusion_of :gender, :in => [ "male", "female" ]
Run Code Online (Sandbox Code Playgroud)
并在迁移中使用本机SQL来添加枚举字段:
class AddEnumType < ActiveRecord::Migration
def up
execute ".." # your native PostgreSQL queries to add the ENUM field
end
end
Run Code Online (Sandbox Code Playgroud)
编辑(2014年6月)
Rails 4.1现在支持枚举.在validates_inclusion_of
现在可以改为:
enum gender: [ :male, :female ]
Run Code Online (Sandbox Code Playgroud)
(但是,底层数据库仍然不支持此功能,因此仍需要本机SQL迁移.)
您还可以将架构设置为使用原始SQL而不是.rb文件.如果您正在利用数据库的更高级功能(枚举,全文搜索,触发器,函数等),而不是简单地将其用作通用数据存储,这将使您的生活更轻松.
只需在config/application.rb中设置此行即可
# Use SQL for the schema due to many database specific settings
config.active_record.schema_format = :sql
Run Code Online (Sandbox Code Playgroud)
它将输出一个structure.sql文件,它将为您解决该问题.
归档时间: |
|
查看次数: |
7033 次 |
最近记录: |