0

Я использую C9 облако рубин на рельсах и мою версию Rails является 5.0.0.1активный порядок записи запроса, где первый

Я хочу, чтобы составить запрос ActiveRecord, чтобы выбрать ресторан с лучшим рейтингом, который не был посетивший вчера , Когда я применил allwhere, 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, но я хотел бы знать, почему и как использовать where в Rails 5. Большое спасибо!

ответ

1

попробовать это:

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

это дает вам коллекцию ресторанов, соответствующим вашим ограничения передается в where методе, результат которого прикован к order методу, который заказывает коллекцию в порядке возрастания значений в rating столбец restaurants стол. используйте :desc, если хотите сделать заказ в порядке убывания.

Затем вы можете retrive последнего объекта с

restaurant1 = restaurants.last 
+0

Результат намного лучше: # <Ресторан: 0x00000003e1aea8>. Я пойду оттуда. Благодаря! –

+0

Кроме того, может помочь мне понять, почему ваши «рестораны» могут генерировать коллекцию, пока мой код не может. –

+0

вы приковали метод заказа до того, где метод. Я попытался заказать вашу коллекцию, не найдя на самом деле их первые – sa77

0

Это даст вам Relation для ресторанов, которые не посетили сегодня, то вы можете позвонить .last по этому вопросу.

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

 Смежные вопросы

  • Нет связанных вопросов^_^