Tôi có vấn đề, rằng tôi có một di cư trong Rails rằng thiết lập một thiết lập mặc định cho một cột, như ví dụ sau:Rails di cư: Hoàn tác thiết lập mặc định cho một cột
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Giả sử, tôi thích thả cài đặt mặc định đó trong lần di chuyển sau, làm cách nào để thực hiện điều đó bằng cách sử dụng di chuyển đường ray?
workaround hiện tại của tôi là thực hiện một lệnh tùy chỉnh sql trong di chuyển đường ray, như thế này:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Nhưng tôi không thích cách tiếp cận này, bởi vì tôi bây giờ phụ thuộc vào cách thức cơ sở dữ liệu cơ bản là giải thích lệnh này. Trong trường hợp thay đổi cơ sở dữ liệu, truy vấn này có thể không hoạt động nữa và quá trình di chuyển sẽ bị hỏng. Vì vậy, có cách nào để thể hiện hoàn tác của một thiết lập mặc định cho một cột trong đường ray?
Trong postgres, điều này sẽ không thực sự thả mặc định cho cột 'CHARACTER VARYING', chỉ cần đặt nó thành' NULL :: ký tự thay đổi '. –
Trong các phiên bản gần đây, bạn có thể làm cho nó có thể đảo ngược. Ví dụ: 'change_column_default (: table_name,: column_name, from: nil, to: false)' – Mark
@AttilaO. Tôi đã thành công khi chạy 'ALTER TABLE table_name ALTER COLUMN loại DROP DEFAULT', không cần thiết lập nó thành' NULL'. –