2009-07-16 6 views
17

Je veux générer un modèle et la table de base de données correspondante dans Rails en utilisant le script du générateur. La table de base de données a un champ avec le type "enum". Comment puis-je le générer?Comment générer un modèle avec un champ de type enum?

create table works { 
    id int unsigned not null auto_increment, 
    nickname varchar(20) not null, 
    sex enum('m', 'f') not null 
}; 

La commande générateur Rails::

dans SQL définition de la table de

script/generator work nickname:string sex:(what should I write here?) 

Répondre

5

Vous pouvez simplement utiliser une chaîne, puis ajouter la validation du modèle comme celui-ci:

validates_inclusion_of : sexe,: in =>% w (mf)

4

Malheureusement, la va Les types de colonnes lid sont les suivants: entier, float, datetime, date, timestamp, heure, texte, chaîne, binaire et booléen

Essayez de créer une chaîne et d'utiliser validates_inclusion_of.

+0

La liaison ne fonctionne pas. –

+0

@RishabhSinghal merci, j'ai enlevé le lien cassé. – erik

27

Rails 4.1 ajoute ActiveRecord::Enum, qui émule les énumérations en utilisant une colonne de type integer. Vous pouvez les utiliser aussi longtemps que vous êtes prêt à changer le type de colonne en entier dans la base de données.

Pour utiliser ces énumérations, mettez integer dans votre ordre de production:

bin/rails generate Work nickname:string sex:integer 

Ensuite, ajoutez un appel à enum dans le fichier modèle généré:

class Work < ActiveRecord::Base 
    enum sex: [ :male, :female ] 
end 

Voir Enum’s documentation pour plus de détails.

Questions connexes