rails 4.2.4 中的列未设置为非空

Columns not being set to not null in rails 4.2.4

我一定是做错了,但我不知道怎么办:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email null: false
      t.string :user_name null: false
      t.string :first_name null: false
      t.string :last_name null: false
      t.string :auth_token null: false

      t.timestamps null: false
    end
  end
end

当我运行:bin/rake db:reset && bin/rake db:migrate && bin/rake db:seed RAILS_ENV=test

并检查 table 我看到:

CREATE TABLE users
(
  id serial NOT NULL,
  email character varying,
  user_name character varying,
  first_name character varying,
  last_name character varying,
  auth_token character varying,
  created_at timestamp without time zone NOT NULL,
  updated_at timestamp without time zone NOT NULL,
  CONSTRAINT users_pkey PRIMARY KEY (id)
)

架构还显示:

  create_table "users", force: :cascade do |t|
    t.string   "email"
    t.string   "user_name"
    t.string   "first_name"
    t.string   "last_name"
    t.string   "auth_token"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

我什至尝试删除数据库并重新 运行 迁移 - 没有。 我做错了什么?

您忘记了一个逗号:

create_table :users do |t|
  t.string :email, null: false
  t.string :user_name, null: false
  t.string :first_name, null: false
  t.string :last_name, null: false
  t.string :auth_token, null: false

  t.timestamps null: false
end

编辑

我不注意,我没有注意到你在第一段代码后的句子。使用 rake 任务时你错了。 你需要使用

rake db:migrate:reset

而不是

rake db:reset && rake db:migrate
  • db:reset 运行 db:drop、db:schema:load、db:seed
  • db:migrate:reset 运行 db:drop, db:create, db:migrate