Самый эффективный метод поиска модели по ID с Model.find - PullRequest
1 голос
/ 13 июля 2011

Я заметил, что могу сделать Model.find несколькими способами (при условии, что @user является экземпляром модели User):

User.find(2)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

ИЛИ

User.find(@user)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

ИЛИ

User.find(@user[:id])
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

ИЛИ

User.find(@user.id)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

Есть ли реальная разница между последними тремя из этих методов?(Я уже знаю, что User.find(n) будет самым быстрым) Я мог бы представить, что все они работают примерно в одно и то же время, но, возможно, я ошибаюсь.

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

С точки зрения sql они все делают одно и то же.

User.find(2)

Это будет самым быстрым, потому что преобразование не требуется.

Затем User.find(@user.id) и User.find(@user[:id]).

И, наконец, User.find(@user, потому что рельсы нужныпреобразовать пользователя в идентификатор.

0 голосов
/ 13 июля 2011

User.find (2) должен быть быстрее, поскольку Rails не нужно выполнять какую-либо работу, чтобы выяснить идентификатор. Другие требуют некоторого уровня передачи сообщений, чтобы получить идентификатор.

Я сомневаюсь, что разница очень значительна.

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

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