При использовании find_by_XXX вы все еще можете использовать order by? Я получаю сообщение об ошибке

#ruby-on-rails

#ruby-on-rails

Вопрос:

Когда я пытаюсь:

 User.find_by_region_id(234).order("id desc")
  

Я получаю сообщение об ошибке с указанием неопределенного метода ‘order’

Должен ли я использовать другой стиль запроса?

Ответ №1:

Вы хотите:

 User.order("id desc").find_by_region_id(234)
  

Это связано с тем, что find_by_xxx возвращает объект model, тогда как order вернет ActiveRecord::Relation , к которому вы затем можете выполнить дальнейшие запросы.

Если вы хотите получить все результаты, где region_id равен 234, и вы хотите упорядочить, вы можете выполнить вызов метода, как и следовало ожидать.

 User.where(:region_id=>234).order("id desc")
  

потому что where возвращает ActiveRecord::Relation

Комментарии:

1. 1 Опередил меня, пока я возился в своей консоли rails. 🙂

Ответ №2:

find_by_xxx возвращает только один объект. Если вы хотите найти первый объект, упорядоченный по ID, сделайте:

 User.order("id DESC").find_by_region_id(234)
  

Если вы хотите, чтобы все объекты с этим идентификатором региона были упорядочены по ID, тогда выполните:

 User.where(:region_id => 234).order("id DESC")