Câu trả lời:
Đây là cách bạn nên làm điều đó:
change_column :users, :admin, :boolean, :default => false
Nhưng một số cơ sở dữ liệu, như PostgreSQL, sẽ không cập nhật trường cho các hàng được tạo trước đó, vì vậy hãy đảm bảo bạn cũng cập nhật trường một cách cẩn thận khi di chuyển.
change_column_default :employees, :foreign, false
from:
và to:
nếu bạn muốn nó có thể đảo ngược :)
from
và to
đã được thêm vào Rails 5+ trong cam kết này: github.com/rails/rails/pull/20018/files
Đối với Rails 4+ , sử dụngchange_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column: foos ,: name, default:" Something cho các giá trị hiện tại "` `change_column_default: foos ,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- nhưng nó cũng không hoạt động.
Sử dụng def change
có nghĩa là bạn nên viết di chuyển có thể đảo ngược. Và change_column
không thể đảo ngược. Bạn có thể đi lên nhưng bạn không thể đi xuống, vì change_column
không thể đảo ngược.
Thay vào đó, mặc dù có thể là một vài dòng phụ, bạn nên sử dụng def up
vàdef down
Vì vậy, nếu bạn có một cột không có giá trị mặc định, thì bạn nên làm điều này để thêm một giá trị mặc định.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Hoặc nếu bạn muốn thay đổi giá trị mặc định cho một cột hiện có.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
Kể từ Rails 4, bạn không thể tạo di chuyển để thêm một cột vào bảng có giá trị mặc định, Các bước sau đây thêm một cột mới vào một bảng hiện có với giá trị mặc định là đúng hoặc sai.
$ rails generate migration add_columnname_to_tablename columnname:boolean
Lệnh trên sẽ thêm một cột mới trong bảng của bạn.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
Hành hình:
rails generate migration add_column_to_table column:boolean
Nó sẽ tạo ra sự di chuyển này:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Đặt giá trị mặc định thêm: default => 1
add_column: bảng ,: cột ,: boolean ,: default => 1
Chạy:
rake db: di chuyển
Key is not present in table error
.
Đây là những gì bạn có thể làm:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDIT: ... nhưng rõ ràng đây là một sai lầm của Rookie!
before_save
up
khối chứ không phải mộtchange
khối. Bạn có thể đểdown
trống khối. Nó sẽ không hoàn nguyên bảng về tình trạng ban đầu nhưng việc di chuyển có thể được khôi phục.