【发布时间】:2021-03-04 15:52:17
【问题描述】:
这个问题举个例子就很容易理解了:像airbnb,客人评价房东,房东评价客人。 Booking 正好有 2 条评论(都是在创建预订时创建的),并且评论有一个字段 submitted: true/false
假设我们希望在房东的个人资料中显示他们的评论,但假设我们想要排除房东尚未评论过客人的任何评论。 (因此,即使房客对房东进行了点评,也应在房客回馈并点评房客之前显示)。我们该怎么做?
还有一个 Booking has_many 评论,评论在 Host 和 Guest 上是多态的。
到目前为止我所知道的
我想出了各种各样的半解决方案,要么不起作用,要么导致 sql 效率极低。这是一个
bookings_for_host = Booking.where(host_id: 1).pluck(:id) # use host number 1 here for example
all_reviews_for_relevant_bookings = Review.where('booking_id IN (?)', bookings_for_host)
# This doesn't work
all_reviews_for_relevant_bookings
.select("booking_id")
.group("booking_id")
.having("COUNT(booking_id = 2")
上面的代码不仅行不通,而且效率也很低。
问题
最终,我如何过滤房东的评论,以便不包含属于_的评论,该预订的评论少于 2 条 submitted == true ?
【问题讨论】:
标签: ruby-on-rails activerecord arel