首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能为chartkick指定一个日期范围吗?

你能为chartkick指定一个日期范围吗?
EN

Stack Overflow用户
提问于 2019-11-18 06:56:43
回答 1查看 629关注 0票数 0

我正在使用chartkick创建一些折线图来可视化我的Rails应用程序中的数据。但是目前,它显示了我的数据库中的所有数据。显然,这并不总是理想的。我希望让用户能够指定所显示数据的日期范围。我将使用记录的created_at值。

我在文档中找不到任何关于如何做到这一点的说明。

https://github.com/ankane/chartkick.js?files=1

我已经创建了一个日期选择器,它会给我一个类似http://localhost:3000/metrics?utf8=%E2%9C%93&search%5Bdate_from%5D=2019-11-01&search%5Bdate_to%5D=2019-11-17&commit=Search的网址

chartkicker能以某种方式访问这些参数吗?

在我的代码中,一个俱乐部有许多DailyMetrics,我已经在俱乐部控制器中创建了一个指标动作。

视图

代码语言:javascript
复制
<%= javascript_include_tag "https://google.com/jsapi" %>

<div class="row">
  <h1>Metrics</h1>
  <div class="pull-right range-query">
    <%= form_tag metrics_path, method: :get do %>
      <%= text_field_tag 'search[date_from]', @search.date_from %>
      <%= text_field_tag 'search[date_to]', @search.date_to %>
      <%= submit_tag 'Search', class: 'btn search-button' %>
    <% end %>
  </div>
</div>

<h3>Total active students</h3>
<%= line_chart @club.daily_metrics.group(:created_at).sum(:total_active_students), library: { animation: { easing: 'easeOutQuad'}} %>
<h3>Lost students</h3>
<%= line_chart @club.daily_metrics.group(:created_at).sum(:lost_students), library: { animation: { easing: 'easeOutQuad'}} %>
<h3>New students</h3>
<%= line_chart @club.daily_metrics.group(:created_at).sum(:new_students), library: { animation: { easing: 'easeOutQuad'}} %>

控制器

代码语言:javascript
复制
def metrics 
  @club = current_club
  @search = MetricSearch.new(params[:search])
  @metrics = @search.scopeContr
end

用于搜索指标的模型

代码语言:javascript
复制
class MetricSearch
    attr_reader :date_from, :date_to

    def initialize(params)
        params ||= {}
        @date_from = parsed_date(params[:date_from], 7.days.ago.to_date.to_s)
        @date_to = parsed_date(params[:date_to], Date.today.to_s)
    end

    def scope
        DailyMetric.where('created_at BETWEEN ? AND ?', @date_from, @date_to)
    end

    private

        def parsed_date(date_string, default)
            Date.parse(date_string)
        rescue ArgumentError, TypeError
            default
        end
end

我想要做的事情是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-18 07:10:45

我在您的评论中发布了一篇很棒的文章的链接,但您也可以使用一个名为gem 'groupdate'的gem。

代码语言:javascript
复制
# Gemfile
gem 'groupdate'

假设你的用户模型是has_many :orders,你想知道他们过去6个月的消费情况:

代码语言:javascript
复制
# order.rb
def self.monthly_spending
  group_by_month(:date, last: 6, current: false).sum('orders.total')
end

在您的视图中:

代码语言:javascript
复制
<%= line_chart current_user.orders.monthly_spending %>

这是另一个tutorial how to group by date with chartkick and groupdate gem

如果你想要预先选择一个开始到最新的查询,你可以在你的前端设置一个datepicker并将参数发送给你的控制器

代码语言:javascript
复制
def show
  orders = Order.where('created_at > %s AND created_at < %s', params[:start_date], params[:end_date])
end

在预过滤的订单列表上调用上面的group_by方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58906009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档