Rails (3.2) uygulamamda, veritabanımda bir sürü tablo var, ancak birkaç boş kısıtlama eklemeyi unuttum. Google'da dolaştım, ancak mevcut bir sütuna boş olmayan bir geçişi nasıl yazacağımı bulamıyorum.
TIA.
Rails (3.2) uygulamamda, veritabanımda bir sürü tablo var, ancak birkaç boş kısıtlama eklemeyi unuttum. Google'da dolaştım, ancak mevcut bir sütuna boş olmayan bir geçişi nasıl yazacağımı bulamıyorum.
TIA.
Yanıtlar:
Rails 4+ için nates'in cevabı ( change_column_null kullanarak ) daha iyidir.
Pre-Rails 4, change_column'u deneyin .
IrreversibleMigration
istediğiniz gibi olmayabilecek bir ürettiğini unutmayın .
Change_column_null öğesini de kullanabilirsiniz :
change_column_null :table_name, :column_name, false
1) İLK: Varsayılan değeri olan sütun ekleyin
2) SONRA: Varsayılan değeri kaldırın
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
Yeni bir geçiş betiği / şeması üzerinde kullanıyorsanız, işte onu nasıl tanımlayabiliriz?
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
:limit
kısıtlama), kullanırken bu özellikleri tekrarlamanız gerekirchange_column
, aksi takdirde bunlar kaybolur. Bu nedenle kullanmayı tercih ediyorumchange_column_null