按类别统计总预订-Rails

时间:2019-06-21 10:04:55

标签: ruby-on-rails ruby

我的预订组has_many预订。预订包含category列,其中数据可以是“成人”或“ child_infant”或child_normal。

现在我要计算所有%child%的总数并将其显示在索引视图表中

我不确定这是否可以一行完成,还是必须使用作用域,这就是我要坚持的地方。

BookingGroup模型

  def search_by_category
    bookings.visible.map(&:category).inject(:+)
  end

2 个答案:

答案 0 :(得分:0)

假设类别是一个字符串列,您应该可以这样计数:

bookings.visible.where("category LIKE ?", "child%").count

bookings.visible.where(category: ["child_infant", "child_normal"]).count

答案 1 :(得分:0)

我们可以像在具有活动记录的SQL中一样使用LIKE

在您的BookingGroup模型中

def search_by_category
    bookings.visible.where('category LIKE ?', '%child%').size
end

但是,如果您对许多booking_groups执行此操作,则您的代码将出现N+1个查询问题。您可以在控制器中使用紧急负载

@booking_groups = BookingGroup.joins(:bookings).select('booking_groups.*', 'count(*) as total_bookings').where('bookings.category LIKE ?', '%child%').group(:id)

那么你可以

@booking_groups.first.total_bookings