Buenas, me encuentro con problemas para comparar horarios. Basicamente el problema que estoy tratando de resolver es para manejar agendas diarias, en las cuales se carga alguna "tarea" que se ejecuta en una franja horaria específica para un día especifico. Inicialmente tenía 2 atributos solamente, de tipo *datetime*: *start_at* y *end_at *pero resulta que se tienen que hacer muchos chequeos un tanto evitables si se usara de la siguiente forma con 3 atributos: *date*(date), *start_at*(time), *end_at*(time). El problema es que en el momento que hice ese cambio dejaron de funcionar las validaciones y después de probar las comparaciones (parte de los métodos que validan) en consola y directamente sobre mysql también resulta que funcionan bien, pero durante la ejecución del escenario tanto en el test como hacíendolo manualmente falla. Me hace mucho ruido en la cabeza igualmente lo siguiente: Si veo sobre la tabla de mysql directamente, veo lo siguiente: | id | patient_id | start_at | end_at | date | user_id | agenda_id | notes | cancelled_at | created_at | updated_at | +----+------------+----------+----------+------------+---------+-----------+-------+--------------+---------------------+---------------------+ | 14 | 1 | *15:00:00* | *21:00:00* | 2011-02-04 | 3 | 1 | | NULL | 2011-02-04 00:24:08 | 2011-02-04 00:24:08 | lo cual me parece perfecto. Ahora si veo en la consola de rails, veo lo siguiente para el objeto que se corresponde con la tupla de la DB anterior: => #<Turn id: 14, patient_id: 1, start_at: "*2000-01-01 15:00:00*", end_at: "*2000-01-01 21:00:00*", date: "2011-02-04", user_id: 3, agenda_id: 1, notes: "", cancelled_at: nil, created_at: "2011-02-04 00:24:08", updated_at: "2011-02-04 00:24:08"> lo cual me desconcierta totalmente... Seguramente es algo que desconozco por no haberme topado con un escenario similar antes. Mi pregunta es porque pone la fecha. Igualmente lo que más me desconcierta es que si hago copy/paste de una parte del código que me debería devolver FALSE en la consola, éste me devuelve FALSE, pero en la ejecución del test o si lo ejecuto manualmente, éste me devuelve TRUE. *Version de Ruby:* dcaliri:imr dcaliri$ ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] *Versión de Rails:* dcaliri:imr dcaliri$ rails -v Rails 3.0.3 En fin... alguien ha tenido algún problema similar? Saludos, gracias -- Diego S. Caliri
2011/2/3 Diego Caliri <diegocaliri@gmail.com>: > Buenas, me encuentro con problemas para comparar horarios. Basicamente el > problema que estoy tratando de resolver es para manejar agendas diarias, en > las cuales se carga alguna "tarea" que se ejecuta en una franja horaria > específica para un día especifico. > Inicialmente tenía 2 atributos solamente, de tipo datetime: start_at y > end_at pero resulta que se tienen que hacer muchos chequeos un tanto > evitables si se usara de la siguiente forma con 3 atributos: date(date), > start_at(time), end_at(time). El problema es que en el momento que hice ese > cambio dejaron de funcionar las validaciones y después de probar las > comparaciones (parte de los métodos que validan) en consola y directamente > sobre mysql también resulta que funcionan bien, pero durante la ejecución > del escenario tanto en el test como hacíendolo manualmente falla. > > Me hace mucho ruido en la cabeza igualmente lo siguiente: > Si veo sobre la tabla de mysql directamente, veo lo siguiente: > | id | patient_id | start_at | end_at | date | user_id | agenda_id | > notes | cancelled_at | created_at | updated_at | > +----+------------+----------+----------+------------+---------+-----------+-------+--------------+---------------------+---------------------+ > | 14 | 1 | 15:00:00 | 21:00:00 | 2011-02-04 | 3 | 1 | > | NULL | 2011-02-04 00:24:08 | 2011-02-04 00:24:08 | > lo cual me parece perfecto. Ahora si veo en la consola de rails, veo lo > siguiente para el objeto que se corresponde con la tupla de la DB anterior: > => #<Turn id: 14, patient_id: 1, start_at: "2000-01-01 15:00:00", end_at: > "2000-01-01 21:00:00", date: "2011-02-04", user_id: 3, agenda_id: 1, notes: > "", cancelled_at: nil, created_at: "2011-02-04 00:24:08", updated_at: > "2011-02-04 00:24:08"> > lo cual me desconcierta totalmente... Seguramente es algo que desconozco por > no haberme topado con un escenario similar antes. Mi pregunta es porque pone > la fecha. > Igualmente lo que más me desconcierta es que si hago copy/paste de una parte > del código que me debería devolver FALSE en la consola, éste me devuelve > FALSE, pero en la ejecución del test o si lo ejecuto manualmente, éste me > devuelve TRUE. > Version de Ruby: > dcaliri:imr dcaliri$ ruby -v > ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] > Versión de Rails: > dcaliri:imr dcaliri$ rails -v > Rails 3.0.3 > En fin... alguien ha tenido algún problema similar? > Saludos, gracias > -- > Diego S. Caliri Fijate en: http://www.rebeccablyth.co.uk/2008/01/03/time-columns-and-rails/ http://www.google.com.ar/search?q=rails+datetime+dummy+date+2000-01-01 Parece que no existe clase equivalente a Time (sin date) en Rails. Saludos y suerte, Tute (pero TuteC, no el otro! :-b )
El 4 de febrero de 2011 15:52, TuteC <tutecosta@gmail.com> escribió: > 2011/2/3 Diego Caliri <diegocaliri@gmail.com>: > > Buenas, me encuentro con problemas para comparar horarios. Basicamente el > > problema que estoy tratando de resolver es para manejar agendas diarias, > en > > las cuales se carga alguna "tarea" que se ejecuta en una franja horaria > > específica para un día especifico. > > Inicialmente tenía 2 atributos solamente, de tipo datetime: start_at y > > end_at pero resulta que se tienen que hacer muchos chequeos un tanto > > evitables si se usara de la siguiente forma con 3 atributos: date(date), > > start_at(time), end_at(time). El problema es que en el momento que hice > ese > > cambio dejaron de funcionar las validaciones y después de probar las > > comparaciones (parte de los métodos que validan) en consola y > directamente > > sobre mysql también resulta que funcionan bien, pero durante la ejecución > > del escenario tanto en el test como hacíendolo manualmente falla. > > > > Me hace mucho ruido en la cabeza igualmente lo siguiente: > > Si veo sobre la tabla de mysql directamente, veo lo siguiente: > > | id | patient_id | start_at | end_at | date | user_id | > agenda_id | > > notes | cancelled_at | created_at | updated_at | > > > +----+------------+----------+----------+------------+---------+-----------+-------+--------------+---------------------+---------------------+ > > | 14 | 1 | 15:00:00 | 21:00:00 | 2011-02-04 | 3 | > 1 | > > | NULL | 2011-02-04 00:24:08 | 2011-02-04 00:24:08 | > > lo cual me parece perfecto. Ahora si veo en la consola de rails, veo lo > > siguiente para el objeto que se corresponde con la tupla de la DB > anterior: > > => #<Turn id: 14, patient_id: 1, start_at: "2000-01-01 15:00:00", > end_at: > > "2000-01-01 21:00:00", date: "2011-02-04", user_id: 3, agenda_id: 1, > notes: > > "", cancelled_at: nil, created_at: "2011-02-04 00:24:08", updated_at: > > "2011-02-04 00:24:08"> > > lo cual me desconcierta totalmente... Seguramente es algo que desconozco > por > > no haberme topado con un escenario similar antes. Mi pregunta es porque > pone > > la fecha. > > Igualmente lo que más me desconcierta es que si hago copy/paste de una > parte > > del código que me debería devolver FALSE en la consola, éste me devuelve > > FALSE, pero en la ejecución del test o si lo ejecuto manualmente, éste me > > devuelve TRUE. > > Version de Ruby: > > dcaliri:imr dcaliri$ ruby -v > > ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] > > Versión de Rails: > > dcaliri:imr dcaliri$ rails -v > > Rails 3.0.3 > > En fin... alguien ha tenido algún problema similar? > > Saludos, gracias > > -- > > Diego S. Caliri > > Fijate en: > http://www.rebeccablyth.co.uk/2008/01/03/time-columns-and-rails/ > http://www.google.com.ar/search?q=rails+datetime+dummy+date+2000-01-01 > > Parece que no existe clase equivalente a Time (sin date) en Rails. > > Saludos y suerte, > > Tute (pero TuteC, no el otro! :-b ) > -- Diego S. Caliri Gracias Emmanuel y Tute!
Estoy desorientado con un error muy particular. Voy a poner las partes
de código que considero relevantes a ver si algun craneo de Rails de la
lista me da una mano:
En el model User, tengo la siguiente validación:
validates :custom_nickname,
:allow_blank => true,
:uniqueness => true,
:format => { :with => /^[A-Za-z]\w+$/ },
:length => { :minimum => 4, :maximum => 15 }
En una vista, tengo los siguientes links:
show.haml.erb
Hi,
= current_user.email
= link_to 'Logout', destroy_user_session_path, :class => 'awesome'
= link_to 'Prefs', preferences_path, :class => 'awesome'
= link_to 'My Channel', user_channel_path(current_user), :class =>
'awesome green'
En mi routes.rb tengo entre otras muchas rutas, la siguiente:
resources :user_channels, :path => 'channels' do
member do
get "/next/:last_rating_id", :to => 'user_channels#next'
end
collection do
get "/followers/:user_id", :to => 'user_channels#followers'
end
end
Mi versión de Rails es 3.0.0. Intente migrar a 3.0.3 pero la mayoria de
la app me deja de funcionar. Probablemente, porque fue desarrollada con
3.0.0beta4.
El problema en cuestión es que si el usuario entra a modificar sus
Preferencias y modifica cualquiera, también me modifica el
custom_nickname a "". Desde el momento que el custom_nickname pasa a ser
"", la la vista show.haml.erb me pincha:
ActionView::Template::Error (No route matches {:action=>"destroy",
:controller=>"user_channels", :id=>#<User id: 19, [...] custom_nickname:
"", private_channel: false, crawled_at: "2010-10-27 18:13:02", raked_at:
"2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil,
tw_token: nil, tw_secret: nil, publish_to_tw: nil>}):
5: = current_user.email
6: = link_to 'Logout', destroy_user_session_path, :class =>
'awesome'
7: = link_to 'Prefs', preferences_path, :class => 'awesome'
8: = link_to 'My Channel', user_channel_path(current_user),
:class => 'awesome green'
9:
10:
11: - if current_user.admin?
app/views/player/show.html.haml:8:in
`_app_views_player_show_html_haml__286813185934507765_4340040_1043211688382998723'
Si vuelvo a setear custom_nickname en nil o en algo que no sea una
cadena vacia, y obviamente, cumpla con el resto de las validaciones,
vuelve a funcionar la vista.
Estoy francamente sorprendido.
Tenes que validar en la regexp para q te admita una cadena vacía, porque tenés validaciones q se contradicen: El allow blank te permitiría la cadena vacía, pero el format no te la permite. El 9 de febrero de 2011 12:42, Tute <tute.unique@gmail.com> escribió: > Estoy desorientado con un error muy particular. Voy a poner las partes > de código que considero relevantes a ver si algun craneo de Rails de la > lista me da una mano: > > > En el model User, tengo la siguiente validación: > > validates :custom_nickname, > :allow_blank => true, > :uniqueness => true, > :format => { :with => /^[A-Za-z]\w+$/ }, > :length => { :minimum => 4, :maximum => 15 } > > > En una vista, tengo los siguientes links: > show.haml.erb > > Hi, > = current_user.email > = link_to 'Logout', destroy_user_session_path, :class => 'awesome' > = link_to 'Prefs', preferences_path, :class => 'awesome' > = link_to 'My Channel', user_channel_path(current_user), :class => > 'awesome green' > > En mi routes.rb tengo entre otras muchas rutas, la siguiente: > > resources :user_channels, :path => 'channels' do > member do > get "/next/:last_rating_id", :to => 'user_channels#next' > end > collection do > get "/followers/:user_id", :to => 'user_channels#followers' > end > end > > Mi versión de Rails es 3.0.0. Intente migrar a 3.0.3 pero la mayoria de > la app me deja de funcionar. Probablemente, porque fue desarrollada con > 3.0.0beta4. > > El problema en cuestión es que si el usuario entra a modificar sus > Preferencias y modifica cualquiera, también me modifica el > custom_nickname a "". Desde el momento que el custom_nickname pasa a ser > "", la la vista show.haml.erb me pincha: > > > > > ActionView::Template::Error (No route matches {:action=>"destroy", > :controller=>"user_channels", :id=>#<User id: 19, [...] custom_nickname: > "", private_channel: false, crawled_at: "2010-10-27 18:13:02", raked_at: > "2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil, > tw_token: nil, tw_secret: nil, publish_to_tw: nil>}): > 5: = current_user.email > 6: = link_to 'Logout', destroy_user_session_path, :class => > 'awesome' > 7: = link_to 'Prefs', preferences_path, :class => 'awesome' > 8: = link_to 'My Channel', user_channel_path(current_user), > :class => 'awesome green' > 9: > 10: > 11: - if current_user.admin? > app/views/player/show.html.haml:8:in > > `_app_views_player_show_html_haml__286813185934507765_4340040_1043211688382998723' > > Si vuelvo a setear custom_nickname en nil o en algo que no sea una > cadena vacia, y obviamente, cumpla con el resto de las validaciones, > vuelve a funcionar la vista. > > Estoy francamente sorprendido. > -- Diego S. Caliri
Y como es posible que en mi local no pase y qué en la consola pueda salvar el usuario sin recibir error de validación? Gracias igual por la respuesta. Voy arreglar eso. On 02/09/2011 04:42 PM, Diego Caliri wrote: > Tenes que validar en la regexp para q te admita una cadena vacía, > porque tenés validaciones q se contradicen: > > El allow blank te permitiría la cadena vacía, pero el format no te la > permite. > > El 9 de febrero de 2011 12:42, Tute <tute.unique@gmail.com > <mailto:tute.unique@gmail.com>> escribió: > > Estoy desorientado con un error muy particular. Voy a poner las partes > de código que considero relevantes a ver si algun craneo de Rails > de la > lista me da una mano: > > > En el model User, tengo la siguiente validación: > > validates :custom_nickname, > :allow_blank => true, > :uniqueness => true, > :format => { :with => /^[A-Za-z]\w+$/ }, > :length => { :minimum => 4, :maximum => 15 } > > > En una vista, tengo los siguientes links: > show.haml.erb > > Hi, > = current_user.email > = link_to 'Logout', destroy_user_session_path, :class => 'awesome' > = link_to 'Prefs', preferences_path, :class => 'awesome' > = link_to 'My Channel', user_channel_path(current_user), :class => > 'awesome green' > > En mi routes.rb tengo entre otras muchas rutas, la siguiente: > > resources :user_channels, :path => 'channels' do > member do > get "/next/:last_rating_id", :to => 'user_channels#next' > end > collection do > get "/followers/:user_id", :to => 'user_channels#followers' > end > end > > Mi versión de Rails es 3.0.0. Intente migrar a 3.0.3 pero la > mayoria de > la app me deja de funcionar. Probablemente, porque fue > desarrollada con > 3.0.0beta4. > > El problema en cuestión es que si el usuario entra a modificar sus > Preferencias y modifica cualquiera, también me modifica el > custom_nickname a "". Desde el momento que el custom_nickname pasa > a ser > "", la la vista show.haml.erb me pincha: > > > > > ActionView::Template::Error (No route matches {:action=>"destroy", > :controller=>"user_channels", :id=>#<User id: 19, [...] > custom_nickname: > "", private_channel: false, crawled_at: "2010-10-27 18:13:02", > raked_at: > "2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil, > tw_token: nil, tw_secret: nil, publish_to_tw: nil>}): > 5: = current_user.email > 6: = link_to 'Logout', destroy_user_session_path, :class => > 'awesome' > 7: = link_to 'Prefs', preferences_path, :class => 'awesome' > 8: = link_to 'My Channel', user_channel_path(current_user), > :class => 'awesome green' > 9: > 10: > 11: - if current_user.admin? > app/views/player/show.html.haml:8:in > `_app_views_player_show_html_haml__286813185934507765_4340040_1043211688382998723' > > Si vuelvo a setear custom_nickname en nil o en algo que no sea una > cadena vacia, y obviamente, cumpla con el resto de las validaciones, > vuelve a funcionar la vista. > > Estoy francamente sorprendido. > > > > > -- > Diego S. Caliri > >
Y como es posible que en mi local no pase y qué en la consola pueda salvar el usuario sin recibir error de validación? Gracias igual por la respuesta. Voy arreglar eso. On 02/09/2011 04:42 PM, Diego Caliri wrote: > Tenes que validar en la regexp para q te admita una cadena vacía, > porque tenés validaciones q se contradicen: > > El allow blank te permitiría la cadena vacía, pero el format no te la > permite. > > El 9 de febrero de 2011 12:42, Tute <tute.unique@gmail.com > <mailto:tute.unique@gmail.com>> escribió: > > Estoy desorientado con un error muy particular. Voy a poner las partes > de código que considero relevantes a ver si algun craneo de Rails > de la > lista me da una mano: > > > En el model User, tengo la siguiente validación: > > validates :custom_nickname, > :allow_blank => true, > :uniqueness => true, > :format => { :with => /^[A-Za-z]\w+$/ }, > :length => { :minimum => 4, :maximum => 15 } > > > En una vista, tengo los siguientes links: > show.haml.erb > > Hi, > = current_user.email > = link_to 'Logout', destroy_user_session_path, :class => 'awesome' > = link_to 'Prefs', preferences_path, :class => 'awesome' > = link_to 'My Channel', user_channel_path(current_user), :class => > 'awesome green' > > En mi routes.rb tengo entre otras muchas rutas, la siguiente: > > resources :user_channels, :path => 'channels' do > member do > get "/next/:last_rating_id", :to => 'user_channels#next' > end > collection do > get "/followers/:user_id", :to => 'user_channels#followers' > end > end > > Mi versión de Rails es 3.0.0. Intente migrar a 3.0.3 pero la > mayoria de > la app me deja de funcionar. Probablemente, porque fue > desarrollada con > 3.0.0beta4. > > El problema en cuestión es que si el usuario entra a modificar sus > Preferencias y modifica cualquiera, también me modifica el > custom_nickname a "". Desde el momento que el custom_nickname pasa > a ser > "", la la vista show.haml.erb me pincha: > > > > > ActionView::Template::Error (No route matches {:action=>"destroy", > :controller=>"user_channels", :id=>#<User id: 19, [...] > custom_nickname: > "", private_channel: false, crawled_at: "2010-10-27 18:13:02", > raked_at: > "2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil, > tw_token: nil, tw_secret: nil, publish_to_tw: nil>}): > 5: = current_user.email > 6: = link_to 'Logout', destroy_user_session_path, :class => > 'awesome' > 7: = link_to 'Prefs', preferences_path, :class => 'awesome' > 8: = link_to 'My Channel', user_channel_path(current_user), > :class => 'awesome green' > 9: > 10: > 11: - if current_user.admin? > app/views/player/show.html.haml:8:in > `_app_views_player_show_html_haml__286813185934507765_4340040_1043211688382998723' > > Si vuelvo a setear custom_nickname en nil o en algo que no sea una > cadena vacia, y obviamente, cumpla con el resto de las validaciones, > vuelve a funcionar la vista. > > Estoy francamente sorprendido. > > > > > -- > Diego S. Caliri > >
Hola Tute,
En el error que mandaste más abajo no dice en qué línea te da error entonces
es un poco difícil de decirte qué está pasando. Tampoco podemos ver cúal es
la lógica que actualiza las perferencias del usuario. Y tampoco podemos ver
dónde está el mapeo de la ruta que justamente no está encontrando:
No route matches {:action=>"destroy",
> :controller=>"user_channels", :id=>#<User id: 19, [...] custom_nickname:
> "", private_channel: false, crawled_at: "2010-10-27 18:13:02", raked_at:
> "2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil,
> tw_token: nil, tw_secret: nil, publish_to_tw: nil>}
Nos podrás mostrar esas cosas?
Saludos,
Ary
2011/2/9 Tute <tute.unique@gmail.com>
> Estoy desorientado con un error muy particular. Voy a poner las partes
> de código que considero relevantes a ver si algun craneo de Rails de la
> lista me da una mano:
>
>
> En el model User, tengo la siguiente validación:
>
> validates :custom_nickname,
> :allow_blank => true,
> :uniqueness => true,
> :format => { :with => /^[A-Za-z]\w+$/ },
> :length => { :minimum => 4, :maximum => 15 }
>
>
> En una vista, tengo los siguientes links:
> show.haml.erb
>
> Hi,
> = current_user.email
> = link_to 'Logout', destroy_user_session_path, :class => 'awesome'
> = link_to 'Prefs', preferences_path, :class => 'awesome'
> = link_to 'My Channel', user_channel_path(current_user), :class =>
> 'awesome green'
>
> En mi routes.rb tengo entre otras muchas rutas, la siguiente:
>
> resources :user_channels, :path => 'channels' do
> member do
> get "/next/:last_rating_id", :to => 'user_channels#next'
> end
> collection do
> get "/followers/:user_id", :to => 'user_channels#followers'
> end
> end
>
> Mi versión de Rails es 3.0.0. Intente migrar a 3.0.3 pero la mayoria de
> la app me deja de funcionar. Probablemente, porque fue desarrollada con
> 3.0.0beta4.
>
> El problema en cuestión es que si el usuario entra a modificar sus
> Preferencias y modifica cualquiera, también me modifica el
> custom_nickname a "". Desde el momento que el custom_nickname pasa a ser
> "", la la vista show.haml.erb me pincha:
>
>
>
>
> ActionView::Template::Error (No route matches {:action=>"destroy",
> :controller=>"user_channels", :id=>#<User id: 19, [...] custom_nickname:
> "", private_channel: false, crawled_at: "2010-10-27 18:13:02", raked_at:
> "2010-11-24 22:46:55", fb_uid: nil, search_recs_at: nil, tw_uid: nil,
> tw_token: nil, tw_secret: nil, publish_to_tw: nil>}):
> 5: = current_user.email
> 6: = link_to 'Logout', destroy_user_session_path, :class =>
> 'awesome'
> 7: = link_to 'Prefs', preferences_path, :class => 'awesome'
> 8: = link_to 'My Channel', user_channel_path(current_user),
> :class => 'awesome green'
> 9:
> 10:
> 11: - if current_user.admin?
> app/views/player/show.html.haml:8:in
>
>
`_app_views_player_show_html_haml__286813185934507765_4340040_1043211688382998723'
>
> Si vuelvo a setear custom_nickname en nil o en algo que no sea una
> cadena vacia, y obviamente, cumpla con el resto de las validaciones,
> vuelve a funcionar la vista.
>
> Estoy francamente sorprendido.
>
El 5 de febrero de 2011 13:29, Diego Caliri <diegocaliri@gmail.com>escribió: > > > El 4 de febrero de 2011 15:52, TuteC <tutecosta@gmail.com> escribió: > > 2011/2/3 Diego Caliri <diegocaliri@gmail.com>: >> > Buenas, me encuentro con problemas para comparar horarios. Basicamente >> el >> > problema que estoy tratando de resolver es para manejar agendas diarias, >> en >> > las cuales se carga alguna "tarea" que se ejecuta en una franja horaria >> > específica para un día especifico. >> > Inicialmente tenía 2 atributos solamente, de tipo datetime: start_at y >> > end_at pero resulta que se tienen que hacer muchos chequeos un tanto >> > evitables si se usara de la siguiente forma con 3 atributos: date(date), >> > start_at(time), end_at(time). El problema es que en el momento que hice >> ese >> > cambio dejaron de funcionar las validaciones y después de probar las >> > comparaciones (parte de los métodos que validan) en consola y >> directamente >> > sobre mysql también resulta que funcionan bien, pero durante la >> ejecución >> > del escenario tanto en el test como hacíendolo manualmente falla. >> > >> > Me hace mucho ruido en la cabeza igualmente lo siguiente: >> > Si veo sobre la tabla de mysql directamente, veo lo siguiente: >> > | id | patient_id | start_at | end_at | date | user_id | >> agenda_id | >> > notes | cancelled_at | created_at | updated_at | >> > >> +----+------------+----------+----------+------------+---------+-----------+-------+--------------+---------------------+---------------------+ >> > | 14 | 1 | 15:00:00 | 21:00:00 | 2011-02-04 | 3 | >> 1 | >> > | NULL | 2011-02-04 00:24:08 | 2011-02-04 00:24:08 | >> > lo cual me parece perfecto. Ahora si veo en la consola de rails, veo lo >> > siguiente para el objeto que se corresponde con la tupla de la DB >> anterior: >> > => #<Turn id: 14, patient_id: 1, start_at: "2000-01-01 15:00:00", >> end_at: >> > "2000-01-01 21:00:00", date: "2011-02-04", user_id: 3, agenda_id: 1, >> notes: >> > "", cancelled_at: nil, created_at: "2011-02-04 00:24:08", updated_at: >> > "2011-02-04 00:24:08"> >> > lo cual me desconcierta totalmente... Seguramente es algo que desconozco >> por >> > no haberme topado con un escenario similar antes. Mi pregunta es porque >> pone >> > la fecha. >> > Igualmente lo que más me desconcierta es que si hago copy/paste de una >> parte >> > del código que me debería devolver FALSE en la consola, éste me devuelve >> > FALSE, pero en la ejecución del test o si lo ejecuto manualmente, éste >> me >> > devuelve TRUE. >> > Version de Ruby: >> > dcaliri:imr dcaliri$ ruby -v >> > ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] >> > Versión de Rails: >> > dcaliri:imr dcaliri$ rails -v >> > Rails 3.0.3 >> > En fin... alguien ha tenido algún problema similar? >> > Saludos, gracias >> > -- >> > Diego S. Caliri >> >> Fijate en: >> http://www.rebeccablyth.co.uk/2008/01/03/time-columns-and-rails/ >> http://www.google.com.ar/search?q=rails+datetime+dummy+date+2000-01-01 >> >> Parece que no existe clase equivalente a Time (sin date) en Rails. >> >> Saludos y suerte, >> >> Tute (pero TuteC, no el otro! :-b ) >> > > > > -- > Diego S. Caliri > > Gracias Emmanuel y Tute! > > Dejo asentado como concluyó este tema: Al final lo resolví guardando como strings los "Time" en la BD corriendo una función en before_validation que me armaba el atributo en el siguiente formato %H:%M y usé select común para los formularios. La buena noticia es que todas las validaciones custom que había escrito antes, me sirvieron a la perfección (comparando con >, < e ==) para los horarios guardados en strings. Muchas Gracias -- Diego S. Caliri
2011/2/3 Diego Caliri <diegocaliri@gmail.com>: > Buenas, me encuentro con problemas para comparar horarios. Basicamente el > problema que estoy tratando de resolver es para manejar agendas diarias, en > las cuales se carga alguna "tarea" que se ejecuta en una franja horaria > específica para un día especifico. > Inicialmente tenía 2 atributos solamente, de tipo datetime: start_at y > end_at pero resulta que se tienen que hacer muchos chequeos un tanto > evitables si se usara de la siguiente forma con 3 atributos: date(date), > start_at(time), end_at(time). El problema es que en el momento que hice ese > cambio dejaron de funcionar las validaciones y después de probar las > comparaciones (parte de los métodos que validan) en consola y directamente > sobre mysql también resulta que funcionan bien, pero durante la ejecución > del escenario tanto en el test como hacíendolo manualmente falla. > > Me hace mucho ruido en la cabeza igualmente lo siguiente: > Si veo sobre la tabla de mysql directamente, veo lo siguiente: > | id | patient_id | start_at | end_at | date | user_id | agenda_id | > notes | cancelled_at | created_at | updated_at | > +----+------------+----------+----------+------------+---------+-----------+-------+--------------+---------------------+---------------------+ > | 14 | 1 | 15:00:00 | 21:00:00 | 2011-02-04 | 3 | 1 | > | NULL | 2011-02-04 00:24:08 | 2011-02-04 00:24:08 | > lo cual me parece perfecto. Ahora si veo en la consola de rails, veo lo > siguiente para el objeto que se corresponde con la tupla de la DB anterior: > => #<Turn id: 14, patient_id: 1, start_at: "2000-01-01 15:00:00", end_at: > "2000-01-01 21:00:00", date: "2011-02-04", user_id: 3, agenda_id: 1, notes: > "", cancelled_at: nil, created_at: "2011-02-04 00:24:08", updated_at: > "2011-02-04 00:24:08"> > lo cual me desconcierta totalmente... Seguramente es algo que desconozco por > no haberme topado con un escenario similar antes. Mi pregunta es porque pone > la fecha. Se me ocurre que el tipo de datos que rails usa cuando le decis que una columna es del tipo "time" en la db es un objeto de clase Time, y time incluye la fecha: ruby-1.9.2-p0 :001 > Time.now => 2011-02-03 22:08:43 -0300 Porque elige ese año en particular, ni idea. Una de esas te resulte más practico guardar la hora como un string, "17:30", un integer: 1730, o partirla en dos integers 17,30. Saludos > Igualmente lo que más me desconcierta es que si hago copy/paste de una parte > del código que me debería devolver FALSE en la consola, éste me devuelve > FALSE, pero en la ejecución del test o si lo ejecuto manualmente, éste me > devuelve TRUE. > Version de Ruby: > dcaliri:imr dcaliri$ ruby -v > ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0] > Versión de Rails: > dcaliri:imr dcaliri$ rails -v > Rails 3.0.3 > En fin... alguien ha tenido algún problema similar? > Saludos, gracias > -- > Diego S. Caliri > >