Error de dato incorrecto

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]

Juan P. wrote:

Que te muestra el log?

2008/8/12 Mauro C. [email protected]


Processing ItemsController#create (for 127.0.0.1 at 2008-08-12 17:56:57)
[POST]
Session ID: 07c5ce2e0e29af9099fc6f2311738cd0
Parameters: {“commit”=>“Guardar”, “action”=>“create”,
“controller”=>“items”, “item”=>{“due_date(1i)”=>“2008”, “done”=>“0”,
“due_date(2i)”=>“10”, “private”=>“0”, “due_date(3i)”=>“12”,
“priority”=>“2”, “category_id”=>“17”, “description”=>“Proyecto
Prioridad”}}
DEPRECATION WARNING: @params is deprecated! Call params.[] instead of
@params.[]. Args: [:item] See Ruby on Rails — A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.
for details. (called from create at
c:/ror/todo/public/…/config/…/app/controllers/items_controller.rb:75)
e[4;36;1mSQL (0.000000)e[0m e[0;1mSET SQL_AUTO_IS_NULL=0e[0m
e[4;35;1mItem Columns (0.010000)e[0m e[0mSHOW FIELDS FROM itemse[0m
e[4;36;1mSQL (0.000000)e[0m e[0;1mBEGINe[0m
e[4;35;1mCategory Columns (0.020000)e[0m e[0mSHOW FIELDS FROM
categoriese[0m
e[4;36;1mCategory Load (0.010000)e[0m e[0;1mSELECT * FROM categories
WHERE (categories.id = 17) e[0m
e[4;35;1mCategory Load (0.000000)e[0m e[0mSELECT * FROM categories
WHERE (categories.category = ‘Cliente 10’ AND categories.id <> 17) LIMIT
1e[0m
e[4;36;1mSQL (0.000000)e[0m e[0;1mCOMMITe[0m
DEPRECATION WARNING: find_all is deprecated and will be removed from
Rails 2.0 (use find(:all, …)) See
Ruby on Rails — A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern. for details. (called from create
at
c:/ror/todo/public/…/config/…/app/controllers/items_controller.rb:80)
e[4;35;1mCategory Load (0.000000)e[0m e[0mSELECT * FROM categories
e[0m
Rendering layoutfalsefileitems/newuse_full_pathtruestatus within
layouts/application
Rendering items/new
DEPRECATION WARNING: start_form_tag is deprecated and will be removed
from Rails 2.0 (use form_tag instead) See
Ruby on Rails — A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern. for details. (called from
_run_rhtml_47app47views47items47new46rhtml at
c:/ror/todo/public/…/config/…/app/views/items/new.rhtml:3)
Rendered items/_form (0.04000)
DEPRECATION WARNING: end_form_tag is deprecated and will be removed from
Rails 2.0 See Ruby on Rails — A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern. for details.
(called from _run_rhtml_47app47views47items47new46rhtml at
c:/ror/todo/public/…/config/…/app/views/items/new.rhtml:11)
DEPRECATION WARNING: @flash is deprecated! Call flash.[] instead of
@flash.[]. Args: [“notice”] See Ruby on Rails — A web-app framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern.
for details. (called from
_run_rhtml_47app47views47layouts47application46rhtml at
c:/ror/todo/public/…/config/…/app/views/layouts/application.rhtml:25)
Completed in 1.16200 (0 reqs/sec) | DB: 0.04000 (3%) | 200 OK
[http://localhost/items/create]

Slds

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.

Juan P. wrote:

Primero creo que deberias de comenzar a sacar los mensajes de
DEPRECATION !

On Tue, Aug 12, 2008 at 6:12 PM, Mauro C. <

Ok, solucione 3 de los 5, quizas me puedan ayudar con este:

def create
begin
@item = Item.new(@params[:item]) Se que el error esta en esta
linea

if @item.save
flash[‘notice’] = ‘Tarea creada exitosamente.’
redirect_to :action => ‘list_by_priority’
else
@categories = Category.find :all
render_action ‘new’
end
rescue
flash[‘notice’] = ‘La tarea no se pudo grabar.’
redirect_to :action => ‘new’
end
end

Muchas gracias

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.[]

:wink:


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 :frowning:

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