2013-07-11 5 views
0

Я стараюсь следовать этому Railscast и создавать диаграмму линии morris.js для моей модели запроса.Rails Итерация по месяцам заданный диапазон дат

Я сгруппировал подсчеты с использованием date_trunc в месяцах, но теперь я не совсем уверен, как получить ось X для повторения в течение нескольких месяцев (например, июн 2012, июль 2013), а не по дате, как в примечания railscasts.

Я пробовал диапазон # шаг method here, но теперь на графике отображается только одна дата (2012-07-01) без счета и ничего больше. Комментирование метода из переменной диапазона, и график работает отлично, но ось x выполняет итерацию по дате.

class Enquiry < ActiveRecord::Base  

def self.chart_data(start = 1.year.ago) 
    total_count = total_count_by_month(start) 
    start = start.to_date.beginning_of_month 
    today = Date.today.beginning_of_month 
    range = (start..today).step(1.month) 

     range.map do |month| 
     { 
      created_at: month, 
      total_enquiries: total_count[] || 0 
     } 
    end 
    end 

    def self.total_count_by_month(start) 
    enquiries = unscoped.where(created_at: start.beginning_of_month..Time.now) 
    enquiries = enquiries.group("date_trunc('month', created_at)") 
    enquiries = enquiries.select("date_trunc('month', created_at) as created_at, count(*) as count") 
    enquiries.each_with_object({}) do |enquiry, counts| 
     counts[enquiry.created_at.to_date] = enquiry.count 
    end 
    end 
end 

Как получить диаграмму оси Х на итерацию по месяцам (июнь 2013, июль 2013 ....), а не по датам?

+0

Возможный дубликат [Итерации каждый месяц с объектами даты] (http://stackoverflow.com/questions/1724639/iterate-every-event-with-date-objects) – oldergod

+0

omg Я чувствую себя таким идиотом! заменяя .step (1.month) на .select {| d | d.day == 1} работает как шарм. –

+2

Ирония заключается в том, что я действительно пытался сделать это решение работать в течение нескольких часов, прежде чем я сдался и отправил свой вопрос. Как всегда, решение всегда на шаг впереди. Большое спасибо –

ответ

2

Для тех, кто еще сталкивается с той же проблемой, решение приводится ниже:

def self.chart_data(start = 1.year.ago) 
    total_count = total_count_by_month(start) 

    ############################################## 
    start = start.to_date.beginning_of_month 
    today = Date.today.beginning_of_month 
    range = (start..today).select {|d| d.day == 1} 
    ############################################## 

    range.map do |month| 
     { 
      created_at: month, 
      total_enquiries: total_count[] || 0 
     } 
    end 
    end 

Картографических х-оси теперь итерации по месяцам.

Решение найдено here.

Я по-прежнему ищу решение о том, как могут отображаться даты графика (% b% Y), в отличие от текущего формата (yyyy-mm-dd).

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