find,where和find_by_id有什么区别?

findwherefind_by_id什么区别? 当您尝试查找给定ID的用户时,它们都会工作。

不同之处在于findlogging或者找不到logging时返回的内容。 考虑下面的例子:

 >> User.create name: 'THE USER' # creates a user with id = 1 >> User.find(1) # returns the user >> User.find_by_id(1) # returns the user >> User.where(id: 1).first # returns the user 

正如你所看到的,现有的用户可以使用3种方法中的任何一种来获取。 与使用where的最大区别是你可以链接命令(当然,没有first调用。)

让我们来看看当你试图find一个不存在的logging

 >> User.find(2) # raises an exception >> User.find_by_id(2) # nil >> User.where(id: 2).first # nil 

所以在这里,很显然,当你使用find来search一个不存在的logging时,你会得到一个exception。 这个例外是在生产环境中呈现404的ActiveRecord::RecordNotFound

希望这可以帮助!

UPDATE

Rails 4对find_by使用以下语法

 >> User.find_by(id: 1) # returns nil if there's no user with an id of 1 >> User.find_by!(id: 1) # raises ActiveRecord::RecordNotFound when no record is found 

find =>这是用来查找id行。 这将返回单个logging。

 YourModel.find(2) Address.find(1) 

find_by =>这是用来获取logging的任何属性的行。 如果条件匹配,这将返回第一个匹配的logging。

 YourModel.find_by_attrname("value") Address.find_by_street_name_and_city("Andheri", "Newyork") Addess.find_by_id(4) 

where =>这是用于获取活动logging的条件,返回活动logging关系(ie)可能是零个或多个logging。

 YourModel.where(:attrname => "something") Address.where(:city => "Newyork") 

find =>如果给定的primary_key(id)存在于系统中,则返回单个logging,否则将给出错误。

 Model.find(required_id_value) 

find_by =>这将返回单个logging取决于给定的属性,如果该属性的值不存在于数据库中,它将返回nil。

 Model.find_by_name("your name") 

这里的名字是属性,它必须存在于你的Modal中。

where =>这将返回一个有效的logging关系,您需要首先使用零个或多个logging返回一个logging,否则返回零。

 Model.where(id: id_value).first