【问题标题】:Improving active record queries改进活动记录查询
【发布时间】:2013-12-20 07:53:06
【问题描述】:

我有以下疑问,我知道它看起来很糟糕。

注意:我将它们添加到实例变量中,因为我将在 highcharts js 库中使用它们,因此每个实例变量将代表 highcharts js 中的单个列/条/行

tickets_controller.rb

def priorities_chart
    priority_base = Ticket.includes(:priority)
    @high_tickets_counter = priority_base.where(priorities: {name: 'High'}).count
    @medium_tickets_counter = priority_base.where(priorities: {name: 'Medium'}).count
    @low_tickets_counter = priority_base.where(priorities: {name: 'Low'}).count
  end

  def statuses_chart
    status_base = Ticket.includes({ticket_statuses: :status})
    @open_tickets_counter = status_base.where(statuses: {ticket_status: 'Open'}).count
    @in_progress_tickets_counter = status_base.where(statuses: {ticket_status: 'In Progress'}).count
    @pending_tickets_counter = status_base.where(statuses: {ticket_status: 'Pending'}).count
    @solved_tickets_counter = status_base.where(statuses: {ticket_status: 'Solved'}).count
    @closed_tickets_counter = status_base.where(statuses: {ticket_status: 'Closed'}).count
  end

  def subjects_chart
    subject_base = Ticket.includes({student: :subjects})
    @subject_1_counter = subject_base.where(subjects: {subject_title: 'Subject 1'}).count
    @subject_2_counter = subject_base.where(subjects: {subject_title: 'Subject 2'}).count
    @subject_3_counter = subject_base.where(subjects: {subject_title: 'Subject 3'}).count
    @subject_4_counter = subject_base.where(subjects: {subject_title: 'Subject 4'}).count
    @subject_5_counter = subject_base.where(subjects: {subject_title: 'Subject 5'}).count
  end

我需要改善这种丑陋的外观并实现以下目标:

1- 如果我有另一个名称不同或超过 10 个主题的主题,我需要一个查询来处理这个问题,而无需像我在这里所做的那样指定主题标题。

2-有没有更好的写priorities_chart和status_chart的方法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2


    【解决方案1】:

    我已尝试将我的工作示例转化为您的案例。

     def subjects_chart
       search = [ 'Subject 1', 'Subject 2', 'Subject 3', 'Subject 4' ]
       subject_base = Ticket.includes({student: :subjects})
       @subject_counter = 
         subject_base.where( subjects: { subject_title: search } ).
         group( 'tickets.id' ).
         count( 'subjects.id' )
    

    结束

    这行得通吗?

    【讨论】:

    • 我还没有尝试过,但是对于主题图表,它仍然指定了它应该呈现的内容,并且我使用的示例数据不是真实的,所以当主题标题更改时,图表将不再起作用了,如果超过四个怎么办,所以这里的一切都是有限的,我需要改变它。
    • 当主题发生变化无需搜索时,按主题分组。我只是想给你一个想法。一切顺利。
    • 没有按预期工作,而且它只有一个变量,我不能将它用于图表
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2016-03-10
    • 2013-02-01
    • 2013-04-23
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多