Respostas:
Aqui está como você deve fazê-lo:
change_column :users, :admin, :boolean, :default => false
Porém, alguns bancos de dados, como o PostgreSQL, não atualizarão o campo para as linhas criadas anteriormente, portanto, atualize o campo manualmente também na migração.
change_column_default :employees, :foreign, false
from:
e to:
se você quer que ele seja reversível :)
Para Rails 4+ , usechange_column_default
def change
change_column_default :table, :column, value
end
def change
`add_column: foos,: name, default:" algo para valores existentes "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- mas também não funciona.
Usar def change
significa que você deve escrever migrações reversíveis. E change_column
não é reversível. Você pode subir, mas não pode descer, poischange_column
é irreversível.
Em vez disso, embora possa haver algumas linhas extras, você deve usar def up
edef down
Portanto, se você tiver uma coluna sem valor padrão, faça isso para adicionar um valor padrão.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: nil
end
Ou se você deseja alterar o valor padrão para uma coluna existente.
def up
change_column :users, :admin, :boolean, default: false
end
def down
change_column :users, :admin, :boolean, default: true
end
No Rails 4, você não pode gerar uma migração para adicionar uma coluna a uma tabela com um valor padrão. As etapas a seguir adicionam uma nova coluna a uma tabela existente com o valor padrão true ou false.
$ rails generate migration add_columnname_to_tablename columnname:boolean
O comando acima irá adicionar uma nova coluna na sua tabela.
class AddColumnnameToTablename < ActiveRecord::Migration
def change
add_column :table_name, :column_name, :boolean, default: false
end
end
$ rake db:migrate
Executar:
rails generate migration add_column_to_table column:boolean
Irá gerar esta migração:
class AddColumnToTable < ActiveRecord::Migration
def change
add_column :table, :column, :boolean
end
end
Defina o valor padrão adicionando: default => 1
add_column: table,: column,: boolean,: default => 1
Corre:
rake db: migrate
Key is not present in table error
.
Isto é o que você pode fazer:
class Profile < ActiveRecord::Base
before_save :set_default_val
def set_default_val
self.send_updates = 'val' unless self.send_updates
end
end
EDIT: ... mas, aparentemente, este é um erro de novato!
before_save
up
bloco e não em umchange
bloco. Você pode deixar odown
bloco vazio. Não reverterá a tabela para a condição original, mas a migração pode ser revertida.