Подтвердить что ты не робот

Какая разница между find, where и find_by_id?

В чем разница между find, where и find_by_id? Все они работают, когда вы пытаетесь найти пользователя с идентификатором.

4b9b3361

Ответ 1

Разница в том, что они возвращают, когда запись найдена, или когда она не найдена. Рассмотрим следующие примеры:

>> User.create name: 'THE USER' # creates a user with id = 1
>> User.find(1) # returns the user
>> User.find_by_id(1) # returns the user
>> User.where(id: 1).first # returns the user

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

Посмотрим, когда вы попытаетесь найти запись, которая не существует

>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil

Итак, очевидно, что при использовании find для поиска записи, которая не существует, вы получаете исключение. Это исключение составляет ActiveRecord::RecordNotFound, который отображает 404 в рабочей среде.

Надеюсь, это поможет!

UPDATE

Rails 4 использует следующий синтаксис для find_by

>> User.find_by(id: 1)  # returns nil if there no user with an id of 1
>> User.find_by!(id: 1) # raises ActiveRecord::RecordNotFound when no record is found

Ответ 2

find = > Эта возвратная одиночная запись, если указанная primary_key (id) существует в системе, в противном случае она даст ошибку.

Model.find(required_id_value)

find_by = > Это приведет к возврату отдельной записи, зависит от данного атрибута, и если значение атрибута не существует в БД, оно вернет нуль.

Model.find_by_name("your name")

name здесь является атрибутом, и он должен существовать в вашем Modal.

, где = > Это приведет к возврату отношения активной записи с нулевыми или более записями, которые нужно использовать сначала, чтобы вернуть только одну запись или нуль в случае возврата нулевых записей.

Model.where(id: id_value).first

Ответ 3

find = > используется для поиска строки id. Это вернет одну запись.

YourModel.find(2)
Address.find(1)

find_by = > Это используется для получения строки по любым атрибутам записи. Это приведет к возврату первой записи соответствия, если условие соответствует.

YourModel.find_by_attrname("value")
Address.find_by_street_name_and_city("Andheri", "Newyork")
Addess.find_by_id(4)

where = > используется для получения активных записей на основе условий для возврата активного отношения записи (то есть) может быть ноль или более записей.

YourModel.where(:attrname => "something")
Address.where(:city => "Newyork")

Ответ 4

Просто для меня....

В результате "Find" возвращает вам один объект, а "Where" возвращает Array, поэтому вам нужно добавить .each для извлечения каждого объекта из этого массива.