我有Venue
,Review
和Voucher
模型。地点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>
答案 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