Pergunta

Eu tenho o problema, que eu tenho uma migração in Rails que configura uma configuração padrão para uma coluna, como neste exemplo:

def self.up
  add_column :column_name, :bought_at, :datetime, :default => Time.now
end

Suponha que, eu gosto de gota que as configurações padrão em uma migração mais tarde, como posso fazer isso com o uso de trilhos migrações?

Minha solução atual é a execução de um comando SQL personalizada na migração trilhos, como este:

def self.up
  execute 'alter table column_name alter bought_at drop default'
end

Mas eu não gosto dessa abordagem, porque eu sou agora dependente da forma como o banco de dados subjacente é interpretar este comando. No caso de uma mudança de base de dados esta consulta talvez não pôde trabalhar mais e a migração seria quebrado. Assim, há uma maneira de expressar o desfazer de uma configuração padrão para uma coluna em trilhos?

Foi útil?

Solução

Rails 5 +

def change
  change_column_default( :table_name, :column_name, from: nil, to: false )
end

Rails 3 e Rails 4

def up
  change_column_default( :table_name, :column_name, nil )
end

def down
  change_column_default( :table_name, :column_name, false )
end

Outras dicas

Sounds como você está fazendo a coisa certa com o seu 'executar', como os documentos destacam-se:

change_column_default(table_name, column_name, default)

Define um novo valor padrão para uma coluna. Se você quiser definir o valor padrão para NULL, você está fora de sorte. Você precisa para DatabaseStatements # executar o instrução SQL apropriada si mesmo. Exemplos

change_column_default(:suppliers, :qualification, 'new')
change_column_default(:accounts, :authorized, 1)

O seguinte trecho eu uso para fazer colunas NULL NOT NULL, mas ignorar DEFAULT a nível esquema:

def self.up
  change_column :table, :column, :string, :null => false, :default => ""
  change_column_default(:table, :column, nil)
end

Trilhos 4

change_column :courses, :name, :string, limit: 100, null: false
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top