我在rails上使用c9 cloud ruby,而我的Rails版本是5.0.0.1
我想撰写一个ActiveRecord查询来选择昨天没有访问过的最佳评级的餐厅。当我在查询中应用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 5中使用where
。非常感谢!
答案 0 :(得分:2)
试试这个:
restaurants = Restaurant.where('last_visit < ?', Date.yesterday).order({ rating: :asc })
这为您提供了一系列符合您在where
方法中传递的约束的餐馆,其结果被链接到order
方法,该方法按照{{1}中的值的升序对订单进行排序} rating
表的列。如果您想按降序排序,请使用restaurants
。
然后,您可以使用
来检索最后一个对象:desc
答案 1 :(得分:0)
这将为您提供今天未访问过的餐馆的Relation
,然后您就可以致电.last
。
restaurant1 = Restaurant.order('rating').where('last_visit<?', Date.yesterday).last
@suggested_restaurants=restaurant1