活动记录查询顺序 where first
active record query order where first
我在 rails 上使用 c9 cloud ruby,我的 Rails 版本是 5.0.0.1
我想编写一个 ActiveRecord 查询 select 昨天没有去过的评分最高的餐厅。当我在查询中应用 all
where
、order
和 first
时,它会抛出错误。但是,如果我不使用 where
或 order
,它工作正常。
这个有效:
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
我在 rails 上使用 c9 cloud ruby,我的 Rails 版本是 5.0.0.1
我想编写一个 ActiveRecord 查询 select 昨天没有去过的评分最高的餐厅。当我在查询中应用 all
where
、order
和 first
时,它会抛出错误。但是,如果我不使用 where
或 order
,它工作正常。
这个有效:
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