我曾经意外地写了一行代码:
User.find_by(PARAMS [:ID])
我的意思是
User.find_by(id:params [:id])
但代码没有抛出异常,它运行正常并且总是返回数据库中的最后一个用户,这让我疯狂地找到我做错的地方。 那么如果我们将一个整数传递给find_by会发生什么?为什么它会返回最后一个对象?
答案 0 :(得分:2)
正如您从api文档中看到的那样,find_by
只是糖的
def find_by(*args)
where(*args).take
end
params[:id]
实际上是一个字符串,因此您最终会执行where("456")
,最终会成为像WHERE (456)
这样的sql片段。除非传递0,否则数据库似乎将其解释为匹配所有行。