запрос в rails3.1 - PullRequest
       19

запрос в rails3.1

0 голосов
/ 30 августа 2011

У меня возникла проблема в rails3.1, в консоли rails

a=User.find_by_name 'castiel'
a.name #output: castiel

a=User.where "name like 'c%'"
a.name #output: User
#both query got the same thing,but why the second one output 'User'

Я использовал новую функцию в rails3.1, которая касается аутентификации, вы знаете ту, которая появилась в эпизоде ​​railscast authentication-in-rails3.1 , возможно, это как-то связано с этим, просто подумал, что было бы неплохо сообщить вам обстоятельства здесь.

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Проблема в том, что find_by_name и where не возвращают одно и то же. find_by_name найдет первого пользователя, который соответствует вашему запросу. where вернет коллекцию пользователей, соответствующих вашему запросу.

В вашем первом примере результатом является один объект User, поэтому a.name дает вам "castiel".

a=User.find_by_name 'castiel'
# 'a' will be something like #<User id:..., name: "castiel"...>
a.name #output: castiel

Однако во втором примере результатом является массив пользовательских объектов. Если вы позвоните a.name, он вернет название модели, которой он владеет: User.

a=User.where "name like 'c%'"
# 'a' might be something like [#<User id:..., name: "castiel"...>] 
a.name #output: User

Даже если использование where, вероятно, вернет вам только один результат, оно все равно будет заключено в массив.

1 голос
/ 30 августа 2011

Это потому, что когда вы используете where, он вернет объект ActiveRecord::Relation, а не объект пользователя. find_by_<blahblah> метод возвращает экземпляр модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...