web-dev-qa-db-ja.com

Ruby on Rails:移行を使用して既存の列にnot null制約を追加するにはどうすればよいですか?

Rails(3.2)アプリでは、データベースにテーブルがたくさんありますが、nullではない制約をいくつか追加するのを忘れていました。グーグルで調べましたが、どうすればよいかわかりません。既存の列にnull以外を追加する移行を記述します。

TIA。

124
David Robertson

Rails 4+、 nates 'answer (using change_column_null )の方が優れています。

プリレール4、 change_column を試してください。

91
Dan Wich

change_column_null を使用することもできます。

change_column_null :table_name, :column_name, false
257
nates

1)最初:デフォルト値で列を追加します

2)その後:デフォルト値を削除

add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
9
rndrfero

新しい移行スクリプト/スキーマの作成で使用している場合、ここで定義できます

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
    t.string :name, null: false     # Notice here, NOT NULL definition
    t.string :email, null: false
    t.string :password, null: false
    t.integer :created_by
    t.integer :updated_by 

    t.datetime :created_at
    t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
   end
  end
end
1
Manjunath Reddy