/ / Ako aktualizovať_atribúty s časovou značkou UNIX a automaticky nastaviť MySQL DATETIME? - ruby-on-rails-3, datetime, unix-timestamp

Ako update_attributes w / UNIX Timestamp a nastaviť MySQL DATETIME automaticky? - ruby ​​na koľajniciach-3, datetime, unix-timestamp

Len som predpokladal, že nejaká koľajnicová mágia budeautomaticky konvertuje prichádzajúci príspevok s unixovým časom 1345069440000 na vhodný dátum a čas na backende. Mám však modelovú udalosť s dátumom s názvom „start_at“ a:

 e = Event.new()
e.start_at = 1345069440000
e.save

Zdá sa, že to odosiela 1345069440000 rovno a potom to mysql zruší. To isté s rubínovým časom

 e = Event.new()
e.start_at = 1345069440
e.save

ak nastavím na ľubovoľné reťazce, urobí to lepšiu prácu pri odvodzovaní:

e.start_at = "1/1344/12"
e.save

nastavuje dátum na „1334-12-01 00:00:00 UTC +00: 00“. Robí to teda pokus.

Je zrejmé, že môžem prepísať nastavovača vo svojej triede, ale dúfal som, že toto správanie zmením oveľa vyššie, aby všetky ovládače podporovali unixové časy pre akýkoľvek odovzdaný dátum a čas.

Koľajnice 3.2, Ruby 1.9.2

odpovede:

1 pre odpoveď č. 1

Zdá sa, že tento kód je z active_record/attribute_methods/time_zone_conversion.rb sa pokúša vykonať konverziu:

unless time.acts_like?(:time)
time = time.is_a?(String) ? Time.zone.parse(time) : time.to_time rescue time
end

Jednou z možností (aj keď trochu ťažkopádnych) by bolo opičie patchovanie Fixnum na pridanie metódy .to_time:

def to_time
Time.at(self)
end