2017-01-28 3 views
0

Я пытаюсь подвести итог minutes_out в день с этим:Rails: неопределенный метод `впрыснуть» для ноля: NilClass

<%= @activities.where(created_at: date.midnight..date.end_of_day).map(&:minutes_out).compact!.inject(0){ |sum, i| sum + i } %> 

Ошибкой я получаю:

неопределенного метод `inject 'для nil: NilClass Вы имели в виду? инспекция

+0

Попробуйте 'compact' без'! ' – HarlemSquirrel

ответ

1

Почему этот сложный расчет? если minutes_out является целым числом

@activities.where(created_at: date.midnight..date.end_of_day).sum(:minutes_out) 

даст вам ответ.

3

compact! возвращает nil, если не было дубликатов. Используйте compact вместо:

<%= @activities.where(created_at: date.midnight..date.end_of_day) 
       .map(&:minutes_out) 
       .compact 
       .inject(0) { |sum, i| sum + i } %> 

Просто побочное замечание: Некоторые могут возразить, что наличие таких сложных запросов в представлении является кодом запах. Возможно, лучше переместить запрос в контроллер или как метод в модель.