"RecordNotFound: Couldn't find User with" 在 rails 教程中

"RecordNotFound: Couldn't find User with" in rails tutorial

我按照[rails教程][rails教程]尝试设置一个简单的网站。 在这个页面中,在 Users table 中插入几条记录后,我使用 rails console,试图找出一些记录。但所有的发现都失败了。

谁能帮忙解释一下为什么会失败?非常感谢

2.0.0-p247 :064 > User.all
  User Load (0.3ms)  SELECT "users".* FROM "users"
 => #<ActiveRecord::Relation [#<User id: 1, name: "Shijie", email: "shijiexu@yahoo.com", created_at: "2016-12-24 22:36:56", updated_at: "2016-12-24 22:36:56">, #<User id: 2, name: "chen jie", email: "chejie@yahoo.com", created_at: "2016-12-24 22:37:36", updated_at: "2016-12-24 22:37:36">, #<User id: 3, name: "Michael Hartl", email: "mmm@example.com", created_at: "2016-12-25 20:56:58", updated_at: "2016-12-25 21:21:38">]> 
2.0.0-p247 :065 > User.find(name: "Shijie")
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", nil]]
ActiveRecord::RecordNotFound: Couldn't find User with 'id'={:name=>"Shijie"}
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.2.0/lib/active_record/core.rb:154:in `find'
    from (irb):65
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start'
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start'
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>'

2.0.0-p247 :066 > User.find(email: "mmm@example.com")
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", nil]]
ActiveRecord::RecordNotFound: Couldn't find User with 'id'={:email=>"mmm@example.com"}
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.2.0/lib/active_record/core.rb:154:in `find'
    from (irb):66
    from /home/shijiex/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start'

生成user.rb。

class User < ActiveRecord::Base
    has_many :microposts

end

我的版本中的 rails 是 Rails 4.2.0,尽管教程中的 rails 适用于 v5+。

find 方法将使用 id 列查找记录。因此,在您的情况下,它会检查 id 值为 email: "mmm@example.com" 的记录,这显然不存在。

如果您想按 id 以外的列查找记录,请使用 find_by 方法并将 column namevalue 作为散列传递。

User.find_by(email: "mmm@example.com")

有关更多信息,请阅读 find_by

的文档