2015-08-23 6 views
-1

Просто мертвое простое приложение для записи данных для записи & отображение записей расписания в Rails 4. После осознания того, что записанные записи времени ранние на 2 часа для моего часового пояса , Я установил значения config.time_zone и config.active_record.default_timezone в «Берлин» соответственно.Rails 4. Неопределенный метод `strftime 'для nil: поле NilClass for created_at

Однако после этого взлома ActiveRecord начинает добавлять миллисекундные данные в sqlite-DB-столбец 'created_at', что, как следствие, вызывает ошибку undefined method strftime для nil: NilClass для моего отображения создания Дата и время. Это как мой больной вид выглядит:

<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> 

Есть ли способ, чтобы остановить запись данных рельсов точности времени или другое решение? Спасибо заранее!

+0

Создает ли запись, которую вы пытаетесь распечатать, свой столбец 'created_at' в вашей БД? – bumpy

+0

Да, это происходит через автоматические отметки времени миграции Rails. – Malvolio

+0

Выполнение 'def nil.strftime; end' в начале, и ошибка исчезнет. –

ответ

0

ли много исследований до нахождения решения. Я также пробовал полный сброс базы данных без успеха. Тогда я нашел это:

Rails 4 model returns always nil

Значение config.active_record.default_timezone в application.rb не должно быть установлено на определенный часовой пояс, но символ, как: местный или: МЫ.

application.rb: 

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

Это изменение и последующий db: reset решает проблему. Спасибо за вклад.

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

Спасибо за подсказку aromero, это исцеляет хотя бы ошибку, однако не производит никакого вывода для поля created_at. – Malvolio

+1

Что бы вы ожидали в этом случае? Значение nil – aromero

+0

Это то, что я ожидаю, но я не понимаю, почему сложная структура ставит в базу значения nil и почему эта функция не может быть отключена. – Malvolio

1

Вы можете использовать условное, как это:

<% 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

Спасибо K M Rakibul Islam, конечно, я мог бы, но я бы предпочел просто отобразить форматированное значение «created_at». :-) – Malvolio

 Смежные вопросы

  • Нет связанных вопросов^_^