find,where和find_by_id有什么区别?
find
, where
和find_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