0

I set a record's timestamp attribute (datetime type) to 0. I saved it (or not). I tried to set it to 0 again.

a = MyModel.last # => #<MyModel id:...
a.updated_at     # => Tue, 12 Mar 2013 01:36:17 UTC +00:00
a.updated_at = 0 # => 0
a.updated_at = 0

I got:

NoMethodError: undefined method `change' for 0:Fixnum

This happened even after restarting rails and reloading the record from the database (local sqlite3). Help!

Edit: The rails console stack trace is more illuminating than the one I get from the server:

NoMethodError: undefined method `change' for 0:Fixnum
       from /Users/nolan/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/attribute_methods/time_zone_conversion.rb:69:in `round_usec'
       from /Users/nolan/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/attribute_methods/time_zone_conversion.rb:46:in `fields_updasqliteted_at='
       from (irb):23
       from /Users/nolan/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
       from /Users/nolan/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
       from /Users/nolan/.rvm/gems/ruby-1.9.2-p320/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
       from script/rails:8:in `require'
       from script/rails:8:in `<main>'
4

2 に答える 2

1

update_columnを使用して、Rails のコールバックと検証をバイパスできます。

この特定のケースでは、update_column を使用すると、FixNum を想定していないために失敗する RoR によって使用されるタイムゾーンおよびその他のメソッドのコールバックがバイパスされます。

于 2013-03-15T16:36:57.680 に答える
0

マジック カラムは datetime 型であるため、整数を割り当てることはできません。必要に応じて、次のリンクを使用できます。

Ruby/Rails:intを時間に変換するか、整数から時間を取得しますか?

于 2013-03-12T04:15:16.720 に答える