2016-07-23 3 views
0

Я установил gem groupdate и gem chartkick и уже перезагрузил свой сервер. Я могу отобразить график, отсортированный по group_by_day на моем show.html.erb. Я использую базу данных PostgreSQLнеопределенный метод `group_by_day 'error rails

show.html.erb

<%= @material.current_stock %> 
<%= line_chart @material.group_by_day(:updated_at).sum(:current_stock) %> 

контроллер/material_controller.rb

def show 
    @material = Material.find(params[:id]) 
end 

это работает прекрасно, когда я объявляю, используя класс

<%= line_chart Material.group_by_day(:updated_at).sum(:current_stock) %> 

но не при замене Материала на @material.

+0

Вы используете 'sqlite' DB? – uzaif

+0

@uzaif, я использую postgresql – hazimIskandar

+0

Существует немного Gotch с 'Groupdate Gem'. Чтобы исправить это, мне нужно преобразовать 'created_at' в соответствующий часовой пояс. Для получения дополнительной информации [Мой вопрос] (http://stackoverflow.com/questions/36178726/rails-group-by-hour-of-the-day-for-created-at-column). И вы должны вызывать 'group-by-day' в классе ActiveRecord, а не на объекте. – VKatz

ответ

0

Она должна быть работой с методом класса и массивом,

контроллера/material_controller.rb

def show 
    @material = Material.where(id:params[:id]) 
end 

Изменения с этим вашего методом контроллера

0

group_by_day работает для любого целого класса или группа объектов, нет необходимости группировать один объект @material.

Для всего класса вы можете использовать,

Material.group_by_day(:updated_at).sum(:current_stock)

Для группы материалов,

@materials = Material.where('your logic') 

@materials.group_by_day { |u| u.updated_at }.sum(:current_stock) 

Но если вы хотите сгруппировать для одного объекта попробовать,

@material = Material.where('your logic').first 

@material.group_by_day { |u| u.updated_at }.sum(:current_stock) 
Смежные вопросы