0

I c9 Wolke Rubin bin mit auf Schienen und meine Rails-Version 5.0.0.1aktive Datensatz Abfrage, um in dem ersten

ich eine Active Abfrage komponieren will das Restaurant mit der besten Bewertung auszuwählen, die gestern besucht wurde nicht . Als ich allwhere, order und first in der Abfrage anwendete, löst es einen Fehler aus. Wenn ich jedoch where oder order nicht verwende, funktioniert es gut.

Dies funktioniert:

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

Diese merkwürdige Ergebnisse liefert:

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

Ergebnisse:#<ActiveRecord::QueryMethods::WhereChain:0x000000046af7f8>

Dieser Fehler ausgelöst:

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

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

I unter Verwendung find_by_sql, um dieses Problem zu bekommen, aber ich würde gerne wissen, warum und wie where in Rails 5. Dank verwenden viel!

Antwort

1

versuchen Sie dies:

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

das gibt Ihnen eine Sammlung von Restaurants, die Ihre Einschränkungen bestand in where Verfahren übereinstimmt, mit dem Ergebnis, zu order Verfahren gekettet ist, dass die Sammlung in aufsteigender Reihenfolge der Werte in rating bestellt Spalte von restaurants Tabelle. Verwenden Sie :desc, wenn Sie in absteigender Reihenfolge bestellen möchten.

Dann können Sie letzte Objekt mit

restaurant1 = restaurants.last 
+0

Das Ergebnis ist viel besser: # . Ich werde von dort gehen. Vielen Dank! –

+0

Auch könnte mir helfen zu verstehen, warum Ihre "Restaurants" eine Sammlung generieren können, während mein Code nicht kann. –

+0

Sie Chained Order-Methode vor, wo Methode .., d. H. Sie haben versucht, Ihre Sammlung zu bestellen, ohne sie zuerst zu finden – sa77

0

retrive Dies gibt Ihnen die Relation für Restaurants, die nicht heute besucht haben, dann können Sie .last auf das nennen.

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