2010-07-07 7 views
0

J'ai donc un modèle avec une association et j'utilise un formulaire unique avec "accept_nested_attributes_for" pour créer des enregistrements. Dans le formulaire, j'ai quelques listes déroulantes pour l'enfant qui ne sont pas toujours requises pour avoir une valeur sélectionnée et quand cette situation arrive, je veux utiliser la valeur par défaut que j'ai spécifiée dans ma migration. Donc, si je soumets le formulaire sans rien sélectionner dans les listes déroulantes, Mysql se plaint d'essayer d'insérer NULL. Je pensais que quelque part le long des lignes la chaîne vide du formulaire utiliserait la valeur de migration par défaut/valeur par défaut dans mysql au lieu d'essayer d'insérer NULL?Formulaire n'utilisant pas les valeurs par défaut de la migration

Ai-je raté quelque chose? Merci d'avance.

Editer: Un peu de code ... (simplifié). "book_type" devrait vraiment être "book_type_id", mais ne tenez pas compte de cela.

erreur Mysql msg:

Mysql::Error: Column 'book_type' cannot be null: INSERT INTO book_details (book_id , book_type , ...) VALUES(1, NULL, ...)

Migration:

class CreateBookDetails < ActiveRecord::Migration 
    def self.up 
    create_table :book_details do |t| 
     t.integer :book_id, :null => false, :default => 0 
     t.integer :book_type, :null => false, :default => 0 
     ... 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :book_details 
    end 
end 
+0

Pouvez-vous montrer les détails de votre migration et l'erreur MySQL spécifique s'il vous plaît? – bjg

+0

Ajout d'un peu plus de détails ... Je savais que quelqu'un demanderait plus d'informations. =) Donc, dans le menu déroulant book_type, je ne veux pas exiger d'entrée utilisateur du formulaire et quand ils ne sélectionnent rien, je veux que l'entrée soit 0. – james

Répondre

1

vous avez 3 choix:

1- changer votre migration, supprimez le ": null => false" pour éviter les erreurs. vous avez dit que dans certains cas, il pourrait ne pas être sélectionné, n'est-ce pas? 2- éditer le modèle et ajouter un rappel before_save pour changer à "0" la valeur si elle était vide dans le formulaire.

3- créer une "option" dans la liste déroulante avec une étiquette vide et "0" comme valeur. de cette façon quand soumettre le formulaire, la valeur reste au moins 0 (tel que défini dans la migration)

cela dépend de vos besoins ;-)

+0

Ah ok cool. Merci! – james

Questions connexes