活动记录查询顺序 where first

active record query order where first

我在 rails 上使用 c9 cloud ruby,我的 Rails 版本是 5.0.0.1

我想编写一个 ActiveRecord 查询 select 昨天没有去过的评分最高的餐厅。当我在查询中应用 all whereorderfirst 时,它会抛出错误。但是,如果我不使用 whereorder,它工作正常。

这个有效:

restaurant1= Restaurant.order('rating').last!
@suggested_restaurants=restaurant1.name

这给出了奇怪的结果:

restaurant1=Restaurant.order('rating').where{last_visit<Date.yesterday}
@suggested_restaurants=restaurant1

结果: #<ActiveRecord::QueryMethods::WhereChain:0x000000046af7f8>

这个触发的错误:

restaurant1=Restaurant.order('rating').where{last_visit<Date.yesterday}.last
@suggested_restaurants=restaurant1

错误: undefined method 'last' for #ActiveRecord::QueryMethods::WhereChain:0x00000004587a10>

我可以通过使用 find_by_sql 解决这个问题,但我想知道为什么以及如何在 Rails 中使用 where 5。非常感谢!

试试这个:

restaurants = Restaurant.where('last_visit < ?', Date.yesterday).order({ rating: :asc })

这为您提供了一组与您在 where 方法中传递的约束相匹配的餐馆,其结果链接到 order 方法,该方法按 [=] 中值的升序对集合进行排序restaurants table 的第 14=] 列。如果您想按降序排列,请使用 :desc

然后,您可以使用

检索最后一个对象
restaurant1 = restaurants.last

这会给你 Relation 今天没有去过的餐馆,然后你可以打电话给 .last

restaurant1 = Restaurant.order('rating').where('last_visit<?', Date.yesterday).last
@suggested_restaurants=restaurant1