Rails查找联接中符合多个条件的所有项目

时间:2020-11-06 14:33:02

标签: ruby-on-rails postgresql activerecord

我有VenueReviewVoucher模型。地点has_many的评论和评论has_one的优惠券。

凭单具有布尔claimed字段。

我正在尝试构建查询以选择特定日期之前的所有claimed: true凭单,并返回该查询的长度。

到目前为止,我已经尝试了以下几种查询:

# @venue is an instance of a Venue
@venue.reviews.joins(:voucher)
    .where(vouchers: { claimed: true })
    .where("created_at < ?", Date.today.beginning_of_week - 7)
    .length

但是我只是得到一个模糊的ActiveRecord::StatementInvalid错误,而我的.length被突出显示了。当我在控制台中没有.length的情况下尝试上述查询时,我得到了<Review::ActiveRecord_AssociationRelation>

1 个答案:

答案 0 :(得分:0)

如果您想要拥有真实且具有正确时间戳的凭证数量,则可以执行以下操作:

Voucher.where(vouchers: { claimed: true })
       .where("created_at < ?", Date.today.beginning_of_week - 7)
       .length

现在,如果您希望针对特定场所使用该场所,则仍想使用voucher开始查询,然后将场所表加入其中:

Voucher.joins(review: :venue)
       .where(venue_id: @venue.id)
       .where(vouchers: { claimed: true })
       .where("created_at < ?", Date.today.beginning_of_week - 7)
       .length

您可能需要与.joins(review: :venue)玩一点儿,您可以在此处找到更多信息:https://guides.rubyonrails.org/active_record_querying.html#joining-tables

相关问题