Chartkick Datepicker/Range 选择器 - 可以选择日期来显示数据
Chartkick Datepicker/Range Selector - Possibility to choose dates to show data
我正在使用 ahoy gem
来跟踪访问并 chartkick gem
向用户显示数据。
在用户仪表板页面中,我有大约 3-4 个图表,每个图表向用户显示不同的数据。
截至今天,我的图表仅显示最近 7 天,我是在 group_by_day(:started_at, last: 7)
之前完成的。
= area_chart Visit.where(user: current_user).group_by_day(:started_at, last: 7).sum(:price), label: '$'
如何添加 datepicker
以便用户可以 select 两个日期 (开始和结束日期) 并显示 selected/giving 日期之间的数据?
更新:
我已经创建了 charts_controller.rb
并从此 controller
& routes
.
获取了图表
例如:
class ChartsController < ApplicationController
def visits
result = Visit.where(user: current_user).group_by_day(:started_at, last: 7).count
render json: [{name: 'Visits', data: result}]
end
我的routes.rb
:
resources :charts, only: [] do
collection do
get 'visits'
end
end
我的看法:
= area_chart visits_charts_path
您可以创建一个 datepicker
并在其上添加一个 onchange 侦听器,然后使用 ajax 将开始和结束日期发送到呈现图表的控制器:
$(".end_at").change(function(e){
end_at = $(e.target).val();
start_at = $(".start_at").val();
$.ajax({
type: "POST",
url: "/charts",
data: {
start_at: start_at,
end_at: end_at,
},
success: function (data) {
$(".chart-container").html(data);
},
});
});
在你的控制器中:
class ChartsController < ApplicationController
def visits
start_at = params[:start_at].to_date
end_at = params[:end_at].to_date
render :inline => "<%= area_chart Visit.where(user: current_user).group_by_day(:started_at, range: start_at..end_at).sum(:price), label: '$' %>"
end
end
我正在使用 ahoy gem
来跟踪访问并 chartkick gem
向用户显示数据。
在用户仪表板页面中,我有大约 3-4 个图表,每个图表向用户显示不同的数据。
截至今天,我的图表仅显示最近 7 天,我是在 group_by_day(:started_at, last: 7)
之前完成的。
= area_chart Visit.where(user: current_user).group_by_day(:started_at, last: 7).sum(:price), label: '$'
如何添加 datepicker
以便用户可以 select 两个日期 (开始和结束日期) 并显示 selected/giving 日期之间的数据?
更新:
我已经创建了 charts_controller.rb
并从此 controller
& routes
.
例如:
class ChartsController < ApplicationController
def visits
result = Visit.where(user: current_user).group_by_day(:started_at, last: 7).count
render json: [{name: 'Visits', data: result}]
end
我的routes.rb
:
resources :charts, only: [] do
collection do
get 'visits'
end
end
我的看法:
= area_chart visits_charts_path
您可以创建一个 datepicker
并在其上添加一个 onchange 侦听器,然后使用 ajax 将开始和结束日期发送到呈现图表的控制器:
$(".end_at").change(function(e){
end_at = $(e.target).val();
start_at = $(".start_at").val();
$.ajax({
type: "POST",
url: "/charts",
data: {
start_at: start_at,
end_at: end_at,
},
success: function (data) {
$(".chart-container").html(data);
},
});
});
在你的控制器中:
class ChartsController < ApplicationController
def visits
start_at = params[:start_at].to_date
end_at = params[:end_at].to_date
render :inline => "<%= area_chart Visit.where(user: current_user).group_by_day(:started_at, range: start_at..end_at).sum(:price), label: '$' %>"
end
end