【问题标题】:Rails ActiveRecord Query Order by dayRails ActiveRecord 查询按天排序
【发布时间】:2019-11-15 10:18:58
【问题描述】:

我正在尝试对我的记录进行排序/排序以在 Chart.js 中显示它们

我想按升序显示周一到周日的餐单,每天有 3 种不同的餐食。如果每顿饭都在每一天都有,这有点工作,但是如果没有订购一种饭菜,例如,日子的顺序就会变得很奇怪。

这是一个没有按我预期工作的示例:

所以如你所见(不要介意德语:D)开始是正确的星期一,......星期四,......星期六,没关系,但星期五的订单(绿色的)是另一顿饭和其他日子一样,所以星期五在星期六之后显示,但我希望它在星期四和星期六之间显示。

这是我对 ActiveRecord 的查询:

    def self.weeklyVollkostOverview
        where(day: Date.today.beginning_of_week..Date.today.end_of_week).where(dish_type: 0).group(:day).order("day ASC").count
    end

    def self.weeklySchonkostOverview
        where(day: Date.today.beginning_of_week .. Date.today.end_of_week).where(dish_type: 1).group(:day).order("day ASC").count
    end

    def self.weeklyVegetarischOverview
        where(day: Date.today.beginning_of_week .. Date.today.end_of_week).where(dish_type: 2).group(:day).order("day ASC").count
    end

在我的控制器中,我正在映射结果:

    @weeklyVoll = OrderCard.weeklyVollkostOverview.map { |key, value| [I18n.l(key, format: "%A", locale: :'de'), value]}
    @weeklySchon = OrderCard.weeklySchonkostOverview.map { |key, value| [I18n.l(key, format: "%A", locale: :'de'), value]}
    @weeklyVegetarisch = OrderCard.weeklyVegetarischOverview.map { |key, value| [I18n.l(key, format: "%A", locale: :'de'), value]}

最后,我在图表中显示结果。

有什么我可以做的不同或者更简单的事情吗? 我知道我可以使用 Groupdate-Gem,但是日期对象和时区转换存在问题,所以我尝试手动进行。

编辑:

变量@weeklyVoll、@weeklySchon 和@weeklyVegetarisch 在我的视图中用于显示图表所在的位置:

<%= column_chart [
        { name: "# Bestellungen Vollkost", data: @weeklyVoll },
        { name: "# Bestellungen Schonkost", data: @weeklySchon },
        { name: "# Bestellungen Vegetarisch", data: @weeklyVegetarisch }
        ],
        colors: ["red", "yellow", "green"],
        xtitle: "Wochentag", 
        ytitle: "# Bestellungen",  
        legend: true,
        legend: "bottom",
        messages: { empty: "Noch keine Daten vorhanden!" },
        library: { scales: { yAxes: [{ gridLines: { display: true }, ticks: { precision: 0 } } ] }, animation: {easing: 'easeOutQuad', duration: 2500} }
 %>

感谢任何帮助!谢谢!

【问题讨论】:

  • @weeklyVoll(或其他任何一个)的值(例如)是多少?
  • 我编辑了我的帖子 :)

标签: ruby-on-rails ruby postgresql activerecord


【解决方案1】:

我认为问题在于三个不同的数组。如果您要在 day/dish_type 上进行分组,然后在最后调用 count 它应该给出类似 ['Day', 'Dish Type'] =&gt; 3 的结果。然后,您将不得不根据需要重新遍历和格式化。我倾向于使用each_with_object

OrderCard.where(day: Date.today.all_week)
  .group(:day, :dish_type).count
# => ['Day', 'Dish Type'] => 3

【讨论】:

  • 考虑使用all_week,它可以帮助您摆脱beginning_of_weekend_of_week 范围。
  • @SebastianPalma 我不知道,这很酷!谢谢:D
  • 是的,这很方便,谢谢!现在我只需要解决另一个问题:D
  • 问题是我需要 3 个不同的栏,所以我认为如果我将所有 3 条记录分组在一起,这将不起作用:/
  • 这就是 each with 对象出现的地方。它将允许您格式化数据以说明某一天没有菜肴类型的地方,因为它不会在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多