第一个

时间:2016-11-30 15:52:27

标签: ruby-on-rails rails-activerecord where-clause ruby-on-rails-5 active-record-query

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

我想撰写一个ActiveRecord查询来选择昨天没有访问过的最佳评级的餐厅。当我在查询中应用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 5中使用where。非常感谢!

2 个答案:

答案 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