我已经使用了各种数据格式的排列来尝试获取Chartkick的多线图以进行渲染。我无处可去。我会粘贴我在此处返回数据的方法的当前迭代,但要知道我整个上午尝试过这种变体:
def trailing_seven_day_profit(id)
user = User.find id
jobs = Job.select("id")
.where("billed != 0.0")
.where("start_date >= ?", Date.today - 1.week)
.where(user_id: id).to_a
mon_sell = tue_sell = wed_sell = thu_sell = fri_sell = sat_sell = sun_sell = 0
mon_cost = tue_cost = wed_cost = thu_cost = fri_cost = sat_cost = sun_cost = 0
products = Product.where("job_id IN (?)", jobs)
products.each do |p|
if p.created_at.strftime("%a") == 'Mon'
mon_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
mon_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Tue'
tue_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
tue_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Wed'
wed_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
wed_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Thu'
thu_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
thu_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Fri'
fri_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
fri_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Sat'
sat_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
sat_cost += (p.quantity * p.cost).to_f
elsif p.created_at.strftime("%a") == 'Sun'
sun_sell += (p.price * p.quantity).to_f + (p.tax * (p.price * p.quantity)).to_f
sun_cost += (p.quantity * p.cost).to_f
end
end
@data = [
['Name', 'Day', 'Sell', 'Cost'],
[user.name, 'Mon', mon_sell.round(2), mon_cost.round(2)],
[user.name, 'Tue', tue_sell.round(2), tue_cost.round(2)],
[user.name, 'Wed', wed_sell.round(2), wed_cost.round(2)],
[user.name, 'Thu', thu_sell.round(2), thu_cost.round(2)],
[user.name, 'Fri', fri_sell.round(2), fri_cost.round(2)],
[user.name, 'Sat', sat_sell.round(2), sat_cost.round(2)],
[user.name, 'Sun', sun_sell.round(2), sun_cost.round(2)]
]
@data
end
我的数据库的一些解释 - 乔布斯有很多产品。产品记录保存和项目成本在添加到作业,销售价格(变化),税收,数量和与作业的关系,库存,我们得到项目的描述等,以及一些时间戳。
因此对于有三种产品的Job#1,我们需要Job.find(1).products.each才能看到信息。
或者Product.find("(?)"中的job_id,[array_of_job_ids])这是我在这里采取的方法。
我过去曾经有过这个报告,但是使用谷歌图表都是手动的,而且代码太可怕了。所以我找到了Chartkick,我喜欢将视图与我正在做的事情进行比较简单。
现在我无法渲染任何内容。
视图应该简单:
<% @users.each do |u| %>
<div class="widget-content">
<%= line_chart name: u.name, data: ReportMaker.new.trailing_seven_day_profit(u.id) %>
</div>
<% end %>
但这没有任何结果。
我已经尝试过as_json,尝试将其作为哈希,它目前处于数组格式,但数据从未出现过,传说中也没有。
所以,显然,出了点问题。但谷歌类似于&#34; chartkick多系列格式&#34;而且你得到了一堆非常无益的结果 - 来自Chartkick页面的文档(对不起老兄),很糟糕。
他说:
<%= line_chart [
{name: "Series A", data: series_a},
{name: "Series B", data: series_b}
] %>
所以wtf是series_a应该是什么样的? JSON?哈希? AR对象?阵列?
我不做简单的事情,比如&#34;工作数量和#34;或&#34;按created_at&#34;对产品进行分组这就是所有的例子。
我必须遍历集合,提取值并组合它们,然后渲染一些数据集。
另外 - 产品的不干净。下面的块会伤到我的心。很高兴接受关于如何干涸的任何指示:)
答案 0 :(得分:0)
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.starred).setChecked(true);
return true;
}
块很难看,因为这个工作应该在数据库级别完成。你需要这样的东西:
products.each
编辑OP:
我修改了您的查询以获得任何结果:
def trailing_seven_day_profit(id)
Product.connection.select_all('
SELECT u.name, DAYNAME(p.created_at) AS day,
p.price * p.quantity + p.tax * p.price * p.quantity AS sell,
p.quantity * p.cost AS cost
FROM products p
INNER JOIN jobs j ON j.id = p.job_id
INNER JOIN users u ON u.id = j.user_id
WHERE j.billed != 0 AND j.start_date >= CURDATE() - INTERVAL 1 WEEK
WHERE u.id = #{id.to_i}
GROUP BY DAYNAME(p.created_at)
'
end
但这会打印出一些完全不正确的内容:
我希望将一周中的7天作为不同的行,以及汇总成本和卖出价格。我将为每个用户抓取此查询以获取我想要的Chartkick数据。我没有数据库向导,我想更多地了解这个可能的解决方案。
在这里编辑,因为我的评论太长了......