6 votes

ArgumentError ('1' n'est pas un type valide) dans Rails

Je travaille sur un formulaire qui comporte une liste de sélection :

<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>

type est un nombre entier dans ma base de données. Le site Property.types tire la liste d'un enum dans mon modèle de propriété :

enum type: { Type_1: 1, Type_2: 2, Type_3: 3 }

Pour une raison quelconque, lorsque je soumets le formulaire, j'obtiens une erreur :

ArgumentError ('1' n'est pas un type valide) : Terminé 500 Internal Server Error en 10ms (ActiveRecord : 4.0ms)

Je suppose que c'est parce que la valeur de la liste sélectionnée est soumise comme une chaîne de caractères au lieu d'un nombre entier.

J'utilise Rails v.5.2.1.

Comment résoudre ce problème ?

9voto

Pavan Points 28752

ArgumentError ('1' n'est pas un type valide)

Vous devez modifier le select comme ci-dessous

<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>

Parce que, cette

<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>

génère le select con options comme

<option value="0">Type_1</option>
<option value="1">Type_2</option>
<option value="2">Type_1</option>

Ainsi, lors de la soumission du formulaire, les valeurs de select sont envoyés en tant que "0", "1", "2" qui sont pas de types valides pour l'enum type .

Et ceci

<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>

génère le select con options comme

<option value="Type_1">Type 1</option>
<option value="Type_2">Type 2</option>
<option value="Type_3">Type 3</option>

Donc maintenant les valeurs de select sont envoyés en tant que "Type_1", "Type_2", "Type_3" qui sont types valides pour l'enum type .

De plus, type est un mot de réserve (qui est utilisé dans STI ). Je recommande de le changer en quelque chose comme property_type

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X