voidstar
2010-Oct-13 18:06 UTC
Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller receiving the params
I currently have a model that simply contains one datetime field: class CreateElectricityReadings < ActiveRecord::Migration def self.up create_table :clocks do |t| t.datetime :time_keeper t.timestamps end end def self.down drop_table :clocks end end If I enter the date string "13/10/2010" into this field its showing up in the controller as params[:clock][:time_keeper] "2010-10-13 23:00:00 UTC". I''ve tried overloading ActiveRecord::ConnectionAdapters::Column string_to_date(string) and ActiveRecord::ConnectionAdapters::Column string_to_time(string) but these seems to get hit when an object is saved not between the form submitting and the controller receiving the params object. Where is the mysterious 23:00:00 hours coming from? Can anyone point me to a good piece of reference reading for how dates and times work in rails land? Thanks -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Marnen Laibow-Koser
2010-Oct-13 18:20 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
voidstar wrote in post #949920:> I currently have a model that simply contains one datetime field: > > class CreateElectricityReadings < ActiveRecord::Migration > def self.up > create_table :clocks do |t| > t.datetime :time_keeper > t.timestamps > end > end > > def self.down > drop_table :clocks > end > end > > If I enter the date string "13/10/2010" into this field its showing up > in the controller as params[:clock][:time_keeper] "2010-10-13 23:00:00 > UTC".Then you just need to call to_s on the date with the format you want. Do this in the controller or the view: it''s just like any other presentation issue. Dates are not stored as strings in the DB.> I''ve tried overloading > ActiveRecord::ConnectionAdapters::Column string_to_date(string) and > ActiveRecord::ConnectionAdapters::Column string_to_time(string) but > these seems to get hit when an object is saved not between the form > submitting and the controller receiving the params object. Where is > the mysterious 23:00:00 hours coming from?If I had to guess, I''d guess that you''re in UTC+1 (Central European Time). So perhaps it''s storing the time as 0:00 local time, then converting to UTC. But I could be wrong.> Can anyone point me to a > good piece of reference reading for how dates and times work in rails > land?You''re overthinking it. Rails does some conversion when the form is submitted to convert three form fields (day, month, year) into a Date object for the DB, and then saves it to a date or datetime field in the DB. In this case, you specified a datetime field in your migration, so when Rails retrieves the record, it puts the value into a DateTime object. If you don''t want the time, don''t use a datetime field in the DB -- or just ignore the time.> > ThanksBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
voidstar
2010-Oct-14 12:21 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
Hey, Thanks for the reply, I could easily write some code to discard the time field, which is what I''ll probably do now but I''d just like to know how rails is doing this, I guess is should go about downloading the rails source and grok it myself. I''m in GMT but using daylight savings. I guess if I just reset the time members of the DateTime object its returning to me I''m relatively insulated from errors if this translation changes in a future release. Thanks Barry On Oct 13, 7:20 pm, Marnen Laibow-Koser <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> voidstar wrote in post #949920: > > > > > > > I currently have a model that simply contains one datetime field: > > > class CreateElectricityReadings < ActiveRecord::Migration > > def self.up > > create_table :clocks do |t| > > t.datetime :time_keeper > > t.timestamps > > end > > end > > > def self.down > > drop_table :clocks > > end > > end > > > If I enter the date string "13/10/2010" into this field its showing up > > in the controller as params[:clock][:time_keeper] "2010-10-13 23:00:00 > > UTC". > > Then you just need to call to_s on the date with the format you want. > Do this in the controller or the view: it''s just like any other > presentation issue. Dates are not stored as strings in the DB. > > > I''ve tried overloading > > ActiveRecord::ConnectionAdapters::Column string_to_date(string) and > > ActiveRecord::ConnectionAdapters::Column string_to_time(string) but > > these seems to get hit when an object is saved not between the form > > submitting and the controller receiving the params object. Where is > > the mysterious 23:00:00 hours coming from? > > If I had to guess, I''d guess that you''re in UTC+1 (Central European > Time). So perhaps it''s storing the time as 0:00 local time, then > converting to UTC. But I could be wrong. > > > Can anyone point me to a > > good piece of reference reading for how dates and times work in rails > > land? > > You''re overthinking it. Rails does some conversion when the form is > submitted to convert three form fields (day, month, year) into a Date > object for the DB, and then saves it to a date or datetime field in the > DB. In this case, you specified a datetime field in your migration, so > when Rails retrieves the record, it puts the value into a DateTime > object. If you don''t want the time, don''t use a datetime field in the > DB -- or just ignore the time. > > > > > Thanks > > Best, > -- > Marnen Laibow-Koserhttp://www.marnen.org > mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org > > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Marnen Laibow-Koser
2010-Oct-14 12:34 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
voidstar wrote in post #950126:> Hey, > Thanks for the reply, I could easily write some code to discard the > time field, which is what I''ll probably do nowYou don''t have to discard anything. Just ignore it. Check Rails'' field types; I think if you define the field in the migration as date instead of datetime, you will get a Date object from the DB, not the DateTime you currently have.> but I''d just like to > know how rails is doing this, I guess is should go about downloading > the rails source and grok it myself.You''ve already got the Rails source.> > I''m in GMT but using daylight savings. > > I guess if I just reset the time members of the DateTime object its > returning to me I''m relatively insulated from errors if this > translation changes in a future release.There''s no need to reset. There''s no translation, really; Rails is creating a DateTime object, so it needs a time value. Again, you''re overthinking it and persuading yourself into more complex code than is actually necessary.> > Thanks > BarryBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
voidstar
2010-Oct-14 14:52 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
I need a date/time object due to domain requirements although at this point I don''t care about the time object, I just want it to be midnight. There are other ways for the user to enter data into this table where the time element becomes relevant. Where do I have the rails source? Also do you know what file/class handles receiving a post request from a form? If anyone else is interested here''s the code I''m using to reset the time to midnight. @gas_reading = @user.gas_readings.build(params[:gas_reading]) @gas_reading.start_date = @gas_reading.start_date.change(:hour => 0, :min => 0, :second => 0) unless @gas_reading.start_date.nil? @gas_reading.end_date = @gas_reading.end_date.change(:hour => 0, :min => 0, :second => 0) unless @gas_reading.end_date.nil? On Oct 14, 1:34 pm, Marnen Laibow-Koser <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> voidstar wrote in post #950126: > > > Hey, > > Thanks for the reply, I could easily write some code to discard the > > time field, which is what I''ll probably do now > > You don''t have to discard anything. Just ignore it. > > Check Rails'' field types; I think if you define the field in the > migration as date instead of datetime, you will get a Date object from > the DB, not the DateTime you currently have. > > > but I''d just like to > > know how rails is doing this, I guess is should go about downloading > > the rails source and grok it myself. > > You''ve already got the Rails source. > > > > > I''m in GMT but using daylight savings. > > > I guess if I just reset the time members of the DateTime object its > > returning to me I''m relatively insulated from errors if this > > translation changes in a future release. > > There''s no need to reset. There''s no translation, really; Rails is > creating a DateTime object, so it needs a time value. Again, you''re > overthinking it and persuading yourself into more complex code than is > actually necessary. > > > > > Thanks > > Barry > > Best, > -- > Marnen Laibow-Koserhttp://www.marnen.org > mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org > > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Michael Pavling
2010-Oct-14 14:57 UTC
Re: Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
On 14 October 2010 15:52, voidstar <barryodriscoll-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> If anyone else is interested here''s the code I''m using to reset the > time to midnight.I''d suggest you use the Rails'' ".beginning_of_day" method... http://apidock.com/rails/ActiveSupport/CoreExtensions/Date/Calculations/beginning_of_day ... possibly easier and certainly more idiomatic. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Walter Lee Davis
2010-Oct-14 15:19 UTC
Re: Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
On Oct 14, 2010, at 10:52 AM, voidstar wrote:> Where do I have the rails source? Also do you know what file/class > handles receiving a post request from a form?Open a new Terminal window and type gem server [and press return]. Open a new browser and visit http://0.0.0.0:8808 Each Gem you have installed will (probably) have two links next to its name, rdoc and www. The rdoc is whatever was generated when you installed the Gem, and the www will be whatever passes for the developer''s Web site. Walter -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Colin Law
2010-Oct-14 15:42 UTC
Re: Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
On 14 October 2010 15:52, voidstar <barryodriscoll-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I need a date/time object due to domain requirements although at this > point I don''t care about the time object, I just want it to be > midnight. There are other ways for the user to enter data into this > table where the time element becomes relevant.My understanding of this issue (which may be flawed) is that if you have a datetime field on a form the rails assumes the value entered is in local time, and converts it to gmt ready to be put in the database. I _think_ that if, in environment.rb you put config.time_zone = ''UTC'' then it will assume that the value entered is already in UTC and will not apply the timezone offset. Colin> > Where do I have the rails source? Also do you know what file/class > handles receiving a post request from a form? > > If anyone else is interested here''s the code I''m using to reset the > time to midnight. > > @gas_reading = @user.gas_readings.build(params[:gas_reading]) > > @gas_reading.start_date = @gas_reading.start_date.change(:hour => > 0, :min => 0, :second => 0) unless @gas_reading.start_date.nil? > @gas_reading.end_date = @gas_reading.end_date.change(:hour => > 0, :min => 0, :second => 0) unless @gas_reading.end_date.nil? > > > > On Oct 14, 1:34 pm, Marnen Laibow-Koser <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >> voidstar wrote in post #950126: >> >> > Hey, >> > Thanks for the reply, I could easily write some code to discard the >> > time field, which is what I''ll probably do now >> >> You don''t have to discard anything. Just ignore it. >> >> Check Rails'' field types; I think if you define the field in the >> migration as date instead of datetime, you will get a Date object from >> the DB, not the DateTime you currently have. >> >> > but I''d just like to >> > know how rails is doing this, I guess is should go about downloading >> > the rails source and grok it myself. >> >> You''ve already got the Rails source. >> >> >> >> > I''m in GMT but using daylight savings. >> >> > I guess if I just reset the time members of the DateTime object its >> > returning to me I''m relatively insulated from errors if this >> > translation changes in a future release. >> >> There''s no need to reset. There''s no translation, really; Rails is >> creating a DateTime object, so it needs a time value. Again, you''re >> overthinking it and persuading yourself into more complex code than is >> actually necessary. >> >> >> >> > Thanks >> > Barry >> >> Best, >> -- >> Marnen Laibow-Koserhttp://www.marnen.org >> mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org >> >> -- >> Posted viahttp://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Marnen Laibow-Koser
2010-Oct-14 16:15 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
voidstar wrote in post #950166:> I need a date/time object due to domain requirements although at this > point I don''t care about the time object,Huh? Design for what you have now, not what you might need in future. [...]> Where do I have the rails source?Do you really need to ask? Remember, Ruby is an interpreted language. That means that you''ve got the source wherever the Rails gem is installed (in vendor/rails if you''ve done that, or wherever "gem which rails" tells you). Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
voidstar
2010-Oct-14 18:38 UTC
Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
Thanks for the replies, beginning_of_day makes a lot more sense. Yes Colin that''s what''s happening, I''d just like to know where exactly the string goes from "dd/mm/yyyy" to being "yyyy-mm-dd hh:mm:ss timezone offset" and if there''s anyway for me to control/over ride that behaviour. Marnen, You''re right what we''re doing right now isn''t good and we''re creating technical debt. As a team we''ve discussed this and given the current requirements and priorities/time we have left, we''ve decided to do it this way. Also I wouldn''t have asked how to see the rails/ruby code if I knew how. I''m coming from java land and before that c++ where I''m used to having to grab the sources for libraries before being able to debug them or read them. The source seems to be scattered about in different gems on my machine, I found doing a "git clone git://github.com/rails/rails.git v2.3.8" was handier to have everything in one place. Any suggestions on where to start looking for how rails accepts a post request and builds the params object and sends it to the correct controller? Thanks again for all the help Barry On Oct 14, 5:15 pm, Marnen Laibow-Koser <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> voidstar wrote in post #950166: > > > I need a date/time object due to domain requirements although at this > > point I don''t care about the time object, > > Huh? Design for what you have now, not what you might need in future. > > [...] > > > Where do I have the rails source? > > Do you really need to ask? Remember, Ruby is an interpreted language. > That means that you''ve got the source wherever the Rails gem is > installed (in vendor/rails if you''ve done that, or wherever "gem which > rails" tells you). > > Best, > -- > Marnen Laibow-Koserhttp://www.marnen.org > mar...-sbuyVjPbboAdnm+yROfE0A@public.gmane.org > > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Colin Law
2010-Oct-14 19:53 UTC
Re: Re: Rails 2.3.8 - What happens to a datetime field between a form being submitted and the controller
On 14 October 2010 19:38, voidstar <barryodriscoll-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Thanks for the replies, > > beginning_of_day makes a lot more sense. > > Yes Colin that''s what''s happening, I''d just like to know where exactly > the string goes from "dd/mm/yyyy" to being "yyyy-mm-dd hh:mm:ss > timezone offset" and if there''s anyway for me to control/over ride > that behaviour.Where and how _exactly_ are you seeing it as this string? What do you see in the log when the form is posted? Apologies if you have already provided that info, I have not got time to look back in detail at the thread at this moment. Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.