2010-02-19 3 views
1

J'ai généré un échafaud Post simple qui a title:string body:text category:string. J'ai plus tard ajouté type:string (et effectué la migration) au modèle et ajouté les champs de sélection dans new.html.erb et edit.html.erb. J'ai également ajouté une validation pour tous ces domaines.Rails ne pas enregistrer champ 'Type:'

<%= f.label :type %> 
<%= f.select :type, Post::TYPES, :prompt => "Select post type" %> 

Lorsque je tente de créer un poste, il me donne:

« Il y avait des problèmes avec les champs suivants: type ne peut pas être vide type ne figure dans la liste »

Même si je fais une sélection. Est-ce que je manque quelque chose d'évident ici?

Sélectionner le code de la classe Poste:

TYPES = [ 
    ["Job", "job"], 
    ["Volunteer", "vol"] 
] 

validates_presence_of :title, :body, :category, :type 
validates_inclusion_of :category, :in => CATEGORIES.map {|disp, value| value} 
validates_inclusion_of :type, :in => TYPES.map {|disp, value| value} 
+0

Vous avez demandé s'il vous manquait quelque chose d'évident alors ... avez-vous redémarré le serveur après avoir effectué la migration? :) – ghoppe

+0

Je l'ai bien fait. Cela se passait hier, donc le système a été redémarré. – Jay

Répondre

3

Le champ type est un champ réservé utilisé pour l'héritage de table unique (STI). Vous devez renommer le champ.

Se reporter à l'article this pour plus de détails

Modifier: Changé le lien pour pointer vers l'article fournir par Matchu.

+1

Liste de tous les mots Rails réservés: http://wiki.rubyonrails.org/rails/pages/ReservedWords – Matchu

+0

Je cherchais cette liste depuis un certain temps. Merci. –

+0

Cela a beaucoup de sens. Merci! – Jay

0

Si vous voulez vraiment, vous pouvez utiliser le champ appelé Type dans Rails 4 en mettant inheritance_column à autre chose:

class Product < ActiveRecord::Base 
    self.inheritance_column = :ruby_type 
end 

Dans Rails 3 et ci-dessous, utilisez la méthode set_inheritance_column au lieu.