Rails ainda não tem suporte para os tipos Enum do Postgres , mas se você precisa deles hoje , aqui está uma maneira rápida de fazê-lo.
Então você criou o tipo enum no banco de dados:
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
Devemos informar o ActiveRecord. Primeiro alias do tipo para texto (faça isso para evitar avisos de tipo “OID inválido”, na verdade, este será um tipo personalizado, uma vez que o Rails os suporta fora da caixa):
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID.alias_type 'my_enum_type', 'text'
Você também deseja corrigir o analisador de coluna para retornar o tipo de coluna correto:
class ActiveRecord::ConnectionAdapters::Column
private
def simplified_type_with_my_enum_type(field_type)
if field_type == 'my_enum_type'
field_type.to_sym
else
simplified_type_without_my_enum_type(field_type)
end
end
alias_method_chain :simplified_type, :my_enum_type
end
Ao consultar, você também desejará converter a string para o seu tipo, por exemplo (se desejar, existe uma maneira de fazer os rails convertê-la automaticamente, consulte OID :: Point neste pedido de pull ):
scope :my_enum_value_is, ->(value){
where('my_enum_value = ?::my_enum_type', value)
}
Esta é uma versão estendida de uma resposta a esta pergunta StackOverflow e inclui informações dos comentários