当我写find_by(整数)时会发生什么?

时间:2014-07-09 06:32:20

标签: ruby-on-rails activerecord

我曾经意外地写了一行代码:

  

User.find_by(PARAMS [:ID])

我的意思是

  

User.find_by(id:params [:id])

但代码没有抛出异常,它运行正常并且总是返回数据库中的最后一个用户,这让我疯狂地找到我做错的地方。 那么如果我们将一个整数传递给find_by会发生什么?为什么它会返回最后一个对象?

1 个答案:

答案 0 :(得分:2)

正如您从api文档中看到的那样,find_by只是糖的

def find_by(*args)
  where(*args).take
end

params[:id]实际上是一个字符串,因此您最终会执行where("456"),最终会成为像WHERE (456)这样的sql片段。除非传递0,否则数据库似乎将其解释为匹配所有行。