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

768 Views Asked by At

I follow the [railstutorial][rails tutorial] try to setup a simple web site. In this page, after inserting several records to the Users table, I use rails console, trying to find out some records. But all findings fail.

Could anyone help explain why it fails? Thanks very much

2.0.0-p247 :064 > User.all
  User Load (0.3ms)  SELECT "users".* FROM "users"
 => #<ActiveRecord::Relation [#<User id: 1, name: "Shijie", email: "[email protected]", created_at: "2016-12-24 22:36:56", updated_at: "2016-12-24 22:36:56">, #<User id: 2, name: "chen jie", email: "[email protected]", created_at: "2016-12-24 22:37:36", updated_at: "2016-12-24 22:37:36">, #<User id: 3, name: "Michael Hartl", email: "[email protected]", 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: "[email protected]")
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", nil]]
ActiveRecord::RecordNotFound: Couldn't find User with 'id'={:email=>"[email protected]"}
    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'

The user.rb is generated.

class User < ActiveRecord::Base
    has_many :microposts

end

The rails in my version is Rails 4.2.0, though the rails in the tutorial is for v5+.

1

There are 1 best solutions below

1
On BEST ANSWER

The find method will look for the record using the id column. So, in your case, it checks for the record with the id value of email: "[email protected]" which obviously doesn't exist.

If you want to find records by a column other than id, use find_by method and pass the column name and value as a hash.

User.find_by(email: "[email protected]")

For more, read the documentation of find_by