Rails 5.2 ruby 2.6
大家好,
我有一个具有状态和updated_at created_at列的模型(也有其他几列)。可能的状态值可以是“待处理”,“途中”,“已完成”。
我要查询该表,以便:
@result =
Model1.includes(Model2: [:model3, :model4, :model5, :model6])
.where(conditions)
.where('Model1.status = ? AND Model1.updated_at > ?', 'Completed', 24.hours.ago)
.order('Model1.created_at DESC')
以上是活动记录查询的示例结构。该查询仅在最近24小时内完成打印。但不会收集其他所有状态。
答案 0 :(得分:1)
includes(Model2: [:model3, :model4, :model5, :model6])
.where(conditions)
.where('(Model1.status = ? AND Model1.updated_at > ?) OR ( Model1.status != ?)', "Completed", 24.hours.ago, "Completed")
.order('Model1.created_at DESC')
答案 1 :(得分:1)
所以您基本上需要这个:
Model.where('Completed', 24.hours.ago)
.or(Model.where(status: ['pending', 'enroute']))
答案 2 :(得分:0)
您可以执行以下操作
Model.where('Model1.status = ? AND Model1.updated_at > ?', 'Completed', 24.hours.ago)
.or(Model.where(status: ['pending', 'enroute']))
或者您可以通过Arel
,
model = Model.arel_table
arel1 = model[:status].eq('Completed').and(model[:updated_at].gteq(24.hours.ago))
arel2 = model[:status].in(['pending', 'enroute'])
Model.where(arel1.or(arel2))