find
,where
和find_by_id
之间的区别是什么?当您尝试查找具有ID的用户时,它们都会起作用。
答案 0 :(得分:61)
不同之处在于它们在找到记录或未找到记录时返回的内容。请考虑以下示例:
>> 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
。)
让我们看看你何时尝试找到一个不存在的记录
>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil
所以在这里,显而易见的是,当您使用find
搜索不存在的记录时,会出现异常。该例外是ActiveRecord::RecordNotFound
,它在生产环境中呈现404。
希望这有帮助!
<强>更新强>
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
答案 1 :(得分:3)
查找 =&gt;如果给定的primary_key(id)存在于系统中,则返回单个记录,否则将产生错误。
0
find_by =&gt;这将返回单个记录取决于给定的属性,如果该属性的值不存在于DB中,它将返回nil。
Model.find(required_id_value)
此处的名称是属性,它必须存在于您的模态中。
其中 =&gt;这将返回一个活动的记录关系,你需要首先使用零个或多个记录来返回一个记录,如果零记录返回则返回nil。
Model.find_by_name("your name")
答案 2 :(得分:1)
find
=&gt;这用于按id
查找行。这将返回单个记录。
YourModel.find(2)
Address.find(1)
find_by
=&gt;这用于通过记录的任何属性获取行。如果条件匹配,这将返回第一个匹配记录。
YourModel.find_by_attrname("value")
Address.find_by_street_name_and_city("Andheri", "Newyork")
Addess.find_by_id(4)
where
=&gt;这用于获取基于条件的活动记录以返回活动记录关系(即)可以是零个或多个记录。
YourModel.where(:attrname => "something")
Address.where(:city => "Newyork")
答案 3 :(得分:0)
对我来说很简单。...
“查找”结果将单个对象返回给您,但“位置”将返回数组给您,因此您需要添加.each从该数组中获取每个对象。