[英]Improving active record queries
我有以下查询,我知道它看起来很糟糕。
注意:我将它们添加到实例变量中,因为我将在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-有没有更好的方法来编写priority_chart和statuses_chart?
我已经尝试将我的工作示例转化为您的案例。
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' )
结束
这管用吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.