ActiveRecord 不一致的行为?
ActiveRecord inconsistent behavior?
我有一个 Rails 7 应用程序,带有用户模型。我正在试验控制台。
我有一个用户模型,里面只有一条记录:
{"id":"1, "email":"me@myemail.com"}
我启动了控制台会话:
rails c
然后我做了:
user = User.find(1)
哪个给了我:
irb(main):009:0> user = User.find(1)
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
=> #<User id: 1, email: "me@myemail.com", created_at: "2022-04-04 12:32:14.000515000 +0000", updated_at: "2022-04-04 12:32:14.000515000 +0000">
irb(主):010:0>
然后我做了:
irb(main):010:0> user.nil?
响应是:
=> false
然后我做了:
user = User.find(2)
结果是:
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/activerecord-7.0.2.2/lib/active_record/core.rb:284:在“查找”中:找不到'id'=2 (ActiveRecord::RecordNotFound)
的用户
然后我做了:
user.nil?
我原以为结果是真的,结果却得到了:
=> false
为什么?
当你说:
user = User.find(2)
find
引发了一个 ActiveRecord::RecordNotFound
异常,因此分配永远不会发生并且 user
不会改变。如果您查看 user
此处,您会发现这就是 User.find(1)
给您的内容。
我有一个 Rails 7 应用程序,带有用户模型。我正在试验控制台。
我有一个用户模型,里面只有一条记录:
{"id":"1, "email":"me@myemail.com"}
我启动了控制台会话:
rails c
然后我做了:
user = User.find(1)
哪个给了我:
irb(main):009:0> user = User.find(1)
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
=> #<User id: 1, email: "me@myemail.com", created_at: "2022-04-04 12:32:14.000515000 +0000", updated_at: "2022-04-04 12:32:14.000515000 +0000">
irb(主):010:0>
然后我做了:
irb(main):010:0> user.nil?
响应是:
=> false
然后我做了:
user = User.find(2)
结果是:
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/activerecord-7.0.2.2/lib/active_record/core.rb:284:在“查找”中:找不到'id'=2 (ActiveRecord::RecordNotFound)
的用户然后我做了:
user.nil?
我原以为结果是真的,结果却得到了:
=> false
为什么?
当你说:
user = User.find(2)
find
引发了一个 ActiveRecord::RecordNotFound
异常,因此分配永远不会发生并且 user
不会改变。如果您查看 user
此处,您会发现这就是 User.find(1)
给您的内容。