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

775 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
Arun Kumar Mohan 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