【发布时间】:2020-03-13 07:37:34
【问题描述】:
我正在使用 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 的 URL
chartkicker 能否以某种方式访问这些参数?
在我的代码中,Club 有许多 DailyMetrics,并且我在 clubs 控制器中创建了一个指标操作。
查看
<%= 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'}} %>
控制器
def metrics
@club = current_club
@search = MetricSearch.new(params[:search])
@metrics = @search.scopeContr
end
搜索指标的模型
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
我正在尝试做的事情可能吗?
【问题讨论】:
-
这是一篇关于设置 chartkick 的精彩文章。也在后台加载数据sitepoint.com/graphs-on-rails-chartkick-in-practice