我注意到我可以通过多种方式执行Model.find
(假设@user是User模型的一个实例):
User.find(2)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ...
OR
User.find(@user)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ...
OR
User.find(@user[:id])
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ...
OR
User.find(@user.id)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ...
后三种方法之间有什么真正的区别吗? (我已经知道User.find(n)
会是最快的)我想他们大约会在同一时间工作,但也许我错了。
答案 0 :(得分:4)
就sql而言,他们都做同样的事情。
User.find(2)
这将是最快的,因为不需要转换。
然后User.find(@user.id)
和User.find(@user[:id])
。
最后User.find(@user
因为rails需要将用户转换为ID。
答案 1 :(得分:0)
User.find(2)应该更快,因为Rails不需要做任何工作来找出id。其他人需要一定程度的消息传递来获取id。
我怀疑差异是非常显着的。
您可以尝试所有这些内容并查看日志以了解获取响应所需的时间。