43 ruby-on-rails ruby-on-rails-3
有什么区别find,where和find_by_id?当您尝试查找给定ID的用户时,它们都有效.
jvn*_*ill 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
Run Code Online (Sandbox Code Playgroud)
如您所见,可以使用3种方法中的任何一种来获取现有用户.使用的最大区别where是你可以链接命令(当然,不first先调用.)
让我们来看看你何时尝试找到一个不存在的记录
>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil
Run Code Online (Sandbox Code Playgroud)
所以在这里,很明显当你find用来搜索不存在的记录时,你会得到一个例外.该例外是ActiveRecord::RecordNotFound在生产环境中呈现404.
希望这可以帮助!
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
Run Code Online (Sandbox Code Playgroud)
find => 如果系统中存在给定的primary_key(id),则返回单个记录,否则将给出错误。
Model.find(required_id_value)
Run Code Online (Sandbox Code Playgroud)
find_by => 这将返回取决于给定属性的单个记录,如果该属性的值在数据库中不存在,它将返回 nil。
Model.find_by_name("your name")
Run Code Online (Sandbox Code Playgroud)
这里的 name 是属性,它必须存在于您的 Modal 中。
其中=> 这将返回一个活动记录关系,其中包含零个或多个记录,您需要首先使用它来仅返回一个记录,或者在返回零记录的情况下返回 nil。
Model.where(id: id_value).first
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21228 次 |
| 最近记录: |