2013-01-07 2 views
1

Voici la sortie dans la console rails:Rails 3.2.8 Enregistrement `save » méthode d'exécution sans erreur, mais n'a pas changé la base de données

Loading development environment (Rails 3.2.8) 
irb(main):001:0> u=User.first 
    User Load (0.2ms) SELECT "users".* FROM "users" LIMIT 1 
=> #<User id: 1, name: "scorpio_et", passwd: "xxx", updated_at: "2013-01-07 12:09:26",expire_time: "2000-01-01 12:09:15"> 
irb(main):002:0> u.expire_time=Time.now 
=> 2013-01-07 20:16:39 +0800 

alors j'execute u.save, de la sortie, il semble travaillé

irb(main):003:0> u.save 
    (0.1ms) begin transaction 
    (0.5ms) UPDATE "users" SET "expire_time" = '2013-01-07 12:16:39.628766', "updated_at" = '2013-01-07 12:16:42.816250' WHERE "users"."id" = 1 
    (85.9ms) commit transaction 
=> true 

Mais quand je rapportez de la base de données, le champ `expire_time » n'a pas changé

irb(main):004:0> User.first 
    User Load (0.4ms) SELECT "users".* FROM "users" LIMIT 1 
=> #<User id: 1, name: "scorpio_et", passwd: "xxx", updated_at: "2013-01-07 12:16:42", expire_time: "2000-01-01 12:16:39"> 

lorsque j'utilise save!' ,it didn't throw exception,and the output is identical with the enregistrer '.Mais je peux mettre à jour un autre champ. Voici le schema.rb: ActiveRecord :: Schema.define (: version => 20130107073652) faire

create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "passwd" 
    t.string "jsoncookie" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.time  "expire_time" 
end 

Je remarque le temps expire_time' field is ', mais je pense qu'il devrait être DATETIME

ma migration: AddExpireTimeToUsers classe < ActiveRecord :: migration changer DEF add_column: utilisateurs,: expire_time,: DataTime fin fin

+0

Avez-vous une exception si vous appelez 'u.save!'? Si oui, pouvez-vous s'il vous plaît ajouter cette information d'erreur à votre question. –

+0

Utilisez-vous la commande 'rails console' pour charger l'environnement des rails? Si oui, existe-t-il une contrainte dans votre modèle d'utilisateur pour le champ 'expire_time' qui limite l'accès à la mise à jour. Essayez également de mettre à jour tout autre champ pour vérifier s'il est mis à jour. –

Répondre

3

L'enregistrement est mis à jour (comparez l'heure 12:09:15 ->12:16:39) mais on dirait que le expire_time a le type time, pas datetime. Donc, la partie date n'est pas stockée dans la base de données.

+0

Oui, je viens de trouver que j'ai mal orthographié 'datetime' à' datatime'.Pensez-vous tous beaucoup – xsj0jsx

Questions connexes