在User.first之后,Devise返回nil

时间:2014-12-06 20:04:35

标签: ruby-on-rails devise

在添加将用户关联到多个帖子的新迁移后,我测试了一些关联。

  class DeviseCreateUsers < ActiveRecord::Migration
     def change
      create_table(:users) do |t|
      ## Customization
      t.string :name
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps
     end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end
end

我迁移后,我应该测试一下 u = User.first 接收这段代码,确保一切顺利。

 User Load (0.3ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> #<User id: 1, name: nil, email: "username@example.com", encrypted_password: "$2a$10$702fd8Io3WH7UTWoTY3rUeUJBcFVlsq8/K6ypPKZUQni...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, confirmation_token: nil, confirmed_at: "2013-04-29 20:25:26", confirmation_sent_at: "2013-04-29 20:25:09", unconfirmed_email: nil, created_at: "2013-04-29 20:25:09", updated_at: "2013-04-29 20:25:26">

但我得到了nil

  2.1.5 :001 > u = User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" ASC LIMIT 1
  => nil 

这是件坏事吗?为什么没有出现什么?

2 个答案:

答案 0 :(得分:3)

您的数据库目前是空的。因此你得到一个零。你可以这样做:

1)使用前端的设计注册功能将新用户添加到表中。

2)在db / seeds.rb文件中添加种子数据,如下所示:

User.find_or_create_by(:email => 'tester@test.com', :password => 'password', :password_confirmation => 'password')

从命令提示符运行rake db:seed。种子数据是您要添加到数据库的初始数据,以便应用程序根据需要运行。

3)使用Rails控制台:在命令提示符下运行rails c并执行以下操作:

User.create(:email => 'tester@test.com', :password => 'password', :password_confirmation => 'password')

答案 1 :(得分:1)

您需要在控制台中执行以下操作以添加第一个用户:

user = User.new(:email => 'tester@test.com', :password => 'testingpassword', 
:password_confirmation => 'testingpassword')
user.save

Devise不为您创建默认用户,因此在您创建一个用户之前,user.first将以nil的形式返回