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
---------------------------------------------------------------------
<td><%= select "item","priority",[1,2,3,4,5] %></td>
---------------------------------------------------------------------
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
on 12.08.2008 22:05
on 12.08.2008 22:12
Que te muestra el log? 2008/8/12 Mauro Cosatto <ruby-forum-incoming@andreas-s.net>
on 12.08.2008 23:12
Juan Pablo wrote: > Que te muestra el log? > > 2008/8/12 Mauro Cosatto <ruby-forum-incoming@andreas-s.net> --------------------------------------------------------------------------------- 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 http://www.rubyonrails.org/deprecation for details. (called from create at c:/ror/todo/public/../config/../app/controllers/items_controller.rb:75) [4;36;1mSQL (0.000000)[0m [0;1mSET SQL_AUTO_IS_NULL=0[0m [4;35;1mItem Columns (0.010000)[0m [0mSHOW FIELDS FROM items[0m [4;36;1mSQL (0.000000)[0m [0;1mBEGIN[0m [4;35;1mCategory Columns (0.020000)[0m [0mSHOW FIELDS FROM categories[0m [4;36;1mCategory Load (0.010000)[0m [0;1mSELECT * FROM categories WHERE (categories.`id` = 17) [0m [4;35;1mCategory Load (0.000000)[0m [0mSELECT * FROM categories WHERE (categories.category = 'Cliente 10' AND categories.id <> 17) LIMIT 1[0m [4;36;1mSQL (0.000000)[0m [0;1mCOMMIT[0m DEPRECATION WARNING: find_all is deprecated and will be removed from Rails 2.0 (use find(:all, ...)) See http://www.rubyonrails.org/deprecation for details. (called from create at c:/ror/todo/public/../config/../app/controllers/items_controller.rb:80) [4;35;1mCategory Load (0.000000)[0m [0mSELECT * FROM categories [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 http://www.rubyonrails.org/deprecation 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 http://www.rubyonrails.org/deprecation 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 http://www.rubyonrails.org/deprecation 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
on 12.08.2008 23:15
Primero creo que deberias de comenzar a sacar los mensajes de DEPRECATION ! On Tue, Aug 12, 2008 at 6:12 PM, Mauro Cosatto <
on 13.08.2008 04:24
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:
<td><%= select "item","priority",(1..5).map{ |e| [e,e] } %></td>
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
on 13.08.2008 10:53
2008/8/13 Ruben. D. <ruben.grunge84@gmail.com>: > 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: > > <td><%= select "item","priority",(1..5).map{ |e| [e,e] } %></td> > > 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 Pablo, arregla esos DEPRECATION WARNING. Quizá sean la razón de tu problema. Lee bien el texto del aviso y actua en consecuencia. Suerte.
on 13.08.2008 17:05
Juan Pablo wrote: > Primero creo que deberias de comenzar a sacar los mensajes de > DEPRECATION ! > > On Tue, Aug 12, 2008 at 6:12 PM, Mauro Cosatto < 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
on 13.08.2008 17:09
2008/8/13 Mauro Cosatto <ruby-forum-incoming@andreas-s.net>: > Juan Pablo 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 http://simplelogica.net/logicola/ Recuerda comer mucha fruta y verdura.
on 13.08.2008 17:13
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.
on 13.08.2008 17:14
Por si no entendiste lo que te dice Manuel, saca el @ 2008/8/13 Manuel González Noriega <manuel.gonzalez.noriega@gmail.com>
on 13.08.2008 17:32
Juan Pablo wrote: > Por si no entendiste lo que te dice Manuel, saca el @ > > 2008/8/13 Manuel González Noriega <manuel.gonzalez.noriega@gmail.com> 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
on 13.08.2008 17:44
2008/8/13 Ruben. D. <ruben.grunge84@gmail.com>: > 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?
on 13.08.2008 20:08
Daniel Rodriguez Troitiño wrote: > 2008/8/13 Ruben. D. <ruben.grunge84@gmail.com>: >> 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
on 13.08.2008 23:58
2008/8/13 Mauro Cosatto <ruby-forum-incoming@andreas-s.net>: > > 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.
on 14.08.2008 15:18
Daniel Rodriguez Troitiño wrote: > 2008/8/13 Mauro Cosatto <ruby-forum-incoming@andreas-s.net>: >> >> 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 Rodriguez. Un abrazo Mauro