2015-08-23 4 views
-1

Juste une application d'enregistrement de données simple morte pour l'enregistrement & affichant des entrées de feuille de temps dans Rails 4. Après avoir réalisé que les entrées de temps enregistrées sont au début de 2 heures pour mon fuseau horaire , J'ai défini les valeurs config.time_zone et config.active_record.default_timezone sur 'Berlin' respectivement. Cependant, après ce hack, ActiveRecord commence à ajouter des données en millisecondes à la colonne sqlite-DB 'created_at', ce qui provoque l'erreur "méthode non définie` strftime 'pour nil: NilClass "pour mon affichage de création datetime. Voici comment mon avis mal semble:Rails 4. Méthode non définie `strftime 'pour nil: NilClass pour le champ created_at

<table> 
    <% @timesheets.each do |t| %> 
     <tr> 
     <td><%= t.user.name %></td> 
     <td><%= t.t_lines %> sor</td> 
     <td><%= t.t_time %> perc</td> 
     <td><%= t.created_at.strftime('%Y.%m.%d %H:%M') %></td> 
     </tr> 
    <% end %> 
</table> 

Y at-il un moyen d'arrêter les rails d'enregistrement de données de temps de précision, ou une autre solution? Merci d'avance!

+0

L'enregistrement que vous essayez d'imprimer a-t-il sa colonne 'created_at' dans votre base de données? – bumpy

+0

Oui, c'est le cas, via la migration automatique des timestamps de Rails. – Malvolio

+0

Exécuter 'def nil.strftime; fin »au début et l'erreur disparaîtra. –

Répondre

0

a fait beaucoup de recherche avant de trouver la solution. J'ai également essayé une réinitialisation complète de base de données sans succès. Je trouve celui-ci:

Rails 4 model returns always nil

La valeur de config.active_record.default_timezone dans application.rb ne doit pas être réglée sur un fuseau horaire spécifique, mais à un symbole comme: local ou: utc.

application.rb: 

config.time_zone = 'Berlin' 
config.active_record.default_timezone = :local 

Cette modification et une nouvelle réinitialisation db: résout le problème. Merci pour les contributions.

4
t.created_at.try(:strftime,'%Y.%m.%d %H:%M') 
+0

Merci pour l'indice aromero, cela guérit au moins l'erreur, mais ne produit aucune sortie pour le champ created_at. – Malvolio

+1

Qu'attendez-vous dans ce cas? La valeur est nulle – aromero

+0

C'est ce que j'attends, je ne comprends pas pourquoi un framework sophistiqué place des valeurs nulles dans la base de données, et pourquoi cette fonctionnalité ne peut pas être désactivée. – Malvolio

1

Vous pouvez utiliser un conditionnel comme ceci:

<% if t.created_at.present? %> 
     <td><%= t.created_at.strftime('%Y.%m.%d %H:%M') %></td> 
    <% else %> 
     <td><p> Time Not Available </p></td> 
    <% end %> 
+0

Merci K M Rakibul Islam, sûrement je pourrais, mais je préférerais simplement afficher une valeur formatée 'created_at'. :-) – Malvolio