Buenas, tengo una web y estoy intentando hacer que funcione como se
debe, en una de las paginas, en la que doy de alta nuevos proyectos
tengo un campo para completar que es el de la priorida, el mismo es un
combo que va de 1 a 5, que son los valores permitidos.
Lo que ocurre es que selecciono un valor y doy guardar y me tira el
siguiente error:
1 error prohibited this item from being saved
There were problems with the following fields:
* Priority must be between 1 (high) and 5 (low)
Lo cual me llama la atencion ya que los valores que figuran en el
desplegable son solo los permitidos
<%= select “item”,“priority”,[1,2,3,4,5] %> |
La validacion que hago es la siguiente:
validates_inclusion_of :priority, :in=>1…5, :message=>“must be between
1 (high) and 5 (low)”
Desde ya muchas gracias
Mauro
Que te muestra el log?
2008/8/12 Mauro C. [email protected]
Hola Mauro, estas usando mal el helper, para generar las opciones del
selecte le tienes que pasar un array anidado, como solo le estabas
pasando
un array, se me hace que esta guardando una cadena vacia en el value
deberia
ser asi:
<%= select "item","priority",(1..5).map{ |e| [e,e] } %>
http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001932&name=select
Saludos.
Rubén Dávila Santos.
http://rubenonrails.com
Primero creo que deberias de comenzar a sacar los mensajes de
DEPRECATION !
On Tue, Aug 12, 2008 at 6:12 PM, Mauro C. <
2008/8/13 Ruben. D. [email protected]:
Hola Mauro, estas usando mal el helper, para generar las opciones del
selecte le tienes que pasar un array anidado, como solo le estabas pasando
un array, se me hace que esta guardando una cadena vacia en el value deberia
ser asi:
<%= select "item","priority",(1..5).map{ |e| [e,e] } %>
http://www.railsbrain.com/api/rails-2.1.0/doc/index.html?a=M001932&name=select
Creo que no es necesario especificar arrays anidados, en el caso de un
array simple se utiliza el texto como texto a mostrar y no se utiliza
value, lo que para HTML significa que el value es el texto. El
resultado te tú código y el suyo creo que va a ser el mismo.
Estoy pensado que el error puede ser por que el valor que llega es una
cadena y el validates comprueba con números (la definición de priority
en la base de datos deberÃa determinar como trata Rails a la
propiedad). Quizá probando con:
validates_inclusion_of :priority, :in=>(1…5).map(&:to_s),
:message=>“must be between
1 (high) and 5 (low)”
Se te solucione.
Por cierto, como dice Juan P., arregla esos DEPRECATION WARNING.
Quizá sean la razón de tu problema. Lee bien el texto del aviso y
actua en consecuencia.
Suerte.
2008/8/13 Mauro C. [email protected]:
Juan P. wrote:
Ok, solucione 3 de los 5, quizas me puedan ayudar con este:
@params is deprecated! Call params.[] instead of
@params.[]
–
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.
Hola Daniel, tienes razon, si le pasas un array simple, toma el mismo
valor
para el value y el caption, pero no es necesario convertir a cadena los
valores para que funcione la validacion, yo uso esa validacion en varios
lados sin ningun problema, me parece que el problema esta por otro lado.
Salud.
Por si no entendiste lo que te dice Manuel, saca el @
2008/8/13 Manuel González Noriega [email protected]
Juan P. wrote:
Por si no entendiste lo que te dice Manuel, saca el @
2008/8/13 Manuel González Noriega [email protected]
Si, ya, muchas gracias a todos, ya limpie los deprecations.
Lo que si el error de la validacion de la prioridad sigue igual
Muchas gracias de todos modos
Slds
Mauro
2008/8/13 Ruben. D. [email protected]:
Hola Daniel, tienes razon, si le pasas un array simple, toma el mismo valor
para el value y el caption, pero no es necesario convertir a cadena los
valores para que funcione la validacion, yo uso esa validacion en varios
lados sin ningun problema, me parece que el problema esta por otro lado.
Salud.
SÃ, ya lo supuse, que si la columna de la base de datos le dice a
Rails que es un número la validación con números deberÃa servir.
Mauro ¿cómo está definido “property” en la tabla de la base de datos
(la migración o el SQL)? Además parece que estás utilizando un Rails
algo antiguo, parece una versión 1.2.x ¿podrÃas decirnos cuál versión
por si las moscas?
Daniel R. Troitiño wrote:
2008/8/13 Ruben. D. [email protected]:
Hola Daniel, tienes razon, si le pasas un array simple, toma el mismo valor
para el value y el caption, pero no es necesario convertir a cadena los
valores para que funcione la validacion, yo uso esa validacion en varios
lados sin ningun problema, me parece que el problema esta por otro lado.
Salud.
SÃ, ya lo supuse, que si la columna de la base de datos le dice a
Rails que es un número la validación con números deberÃa servir.
Mauro ¿cómo está definido “property” en la tabla de la base de datos
(la migración o el SQL)? Además parece que estás utilizando un Rails
algo antiguo, parece una versión 1.2.x ¿podrÃas decirnos cuál versión
por si las moscas?
La version de rails es 1.2.3, con respecto a la tabla te referis a
“priority” no? lo definà como “tinyint” (1)
Slds
Mauro
2008/8/13 Mauro C. [email protected]:
La version de rails es 1.2.3, con respecto a la tabla te referis a
“priority” no? lo definà como “tinyint” (1)
Slds
De la documentación de ActiveRecord 1.15.5 (creo que corresponde a
Rails 1.2.5, es el más antiguo que tengo instalado):
By default, the MysqlAdapter will consider all columns of type
tinyint(1)
as boolean. If you wish to disable this emulation (which was the
default
behavior in versions 0.13.1 and earlier) you can add the following
line
to your environment.rb file:
ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans =
false
Puede que sea eso. O metes esa lÃnea en el environment.rb (y haces los
boolean de otra forma) o amplias el rango de tus valores de prioridad
a tinyint(2) o algo asÃ.
Creo que has chocado contra un “feature” muy extraño de Rails.
Suerte.
Daniel R. Troitiño wrote:
2008/8/13 Mauro C. [email protected]:
La version de rails es 1.2.3, con respecto a la tabla te referis a
“priority” no? lo definà como “tinyint” (1)
Slds
De la documentación de ActiveRecord 1.15.5 (creo que corresponde a
Rails 1.2.5, es el más antiguo que tengo instalado):
By default, the MysqlAdapter will consider all columns of type
tinyint(1)
as boolean. If you wish to disable this emulation (which was the
default
behavior in versions 0.13.1 and earlier) you can add the following
line
to your environment.rb file:
ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans =
false
Puede que sea eso. O metes esa lÃnea en el environment.rb (y haces los
boolean de otra forma) o amplias el rango de tus valores de prioridad
a tinyint(2) o algo asÃ.
Creo que has chocado contra un “feature” muy extraño de Rails.
Suerte.
Listo muchachos!, muchisimas gracias, tema solucionado.
Alcanzo con modificar en mi tabla el rango a tinyint(2) como comento el
amigo Daniel R…
Un abrazo
Mauro