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) 给您的内容。