find和find_by有什么区别?

时间:2017-07-28 22:26:15

标签: ruby-on-rails

我从rails文档中了解到find会导致RecordNotFound错误。但是,如果找不到记录,find_by方法只会返回nil。返回nil对我来说似乎更直观,而且一般都很安全,所以我想知道在find方法上使用find_by方法是否有任何好处?

例如,以下内容之间有什么区别:

myRecord.find(1)

myRecord.find_by(id: 1) 

如果唯一的区别是find在找不到记录时引发错误,我实际上并没有看到使用find的好处。

修改

对于那些跳出我的问题然后说它已经得到回答的人来说,你错了。我明确表示,我知道find在找不到记录时会返回错误(这是其他人在答案中强调的内容)并且find_by返回nil。我想知道是否还有其他差异。

1 个答案:

答案 0 :(得分:4)

在你的具体例子中,除了你提到的错误vs nil之外,它们之间没有什么区别。无论您是想处理错误还是零错都完全取决于您。

对于理解何时错误优于nil的伟大解释,反之亦然阅读this

如果您使用id以外的属性进行搜索,则使用find将无法正常工作,因为它只能通过其ID访问元素。