Atribuição de valor padrão ao criar arquivo de migração

104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok, eu uso a linha acima para criar um arquivo de migração que gera automaticamente o código no arquivo gerado para adicionar uma coluna a um modelo de Tweet com tipo de dados inteiro. Agora quero adicionar o valor padrão à coluna adicionada ao gerar o arquivo de migração. Isso é possível? Eu pesquisei, mas não consegui encontrar. Caras precisam de ajuda.

kxhitiz
fonte
veja o RailsGuide sobre o assunto: guias.rubyonrails.org/migrations.html a informação que você está procurando está na primeira seção Anatomia de uma Migração
Austin Lin
1
Sei exatamente o que você quer dizer. Continuei tentando definir um valor padrão também, e era meio complicado tentar encontrar informações. Apenas gerar o SQL puro foi mais fácil, embora não haja migração no controle de versão.
Tass

Respostas:

166

O gerador de migração padrão não lida com valores padrão ( modificadores de coluna são suportados, mas não incluem defaultou null), mas você pode criar seu próprio gerador.

Você também pode atualizar manualmente o arquivo de migração antes de executá-lo rake db:migrate, adicionando as opções a add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... e leia a API Rails

taro
fonte
9
Ok, obrigado pela resposta. Achei que seria ótimo se o gerador de migração padrão fornecesse a opção de lidar com os valores padrão para que eu não tivesse que editar o arquivo de migração depois de ser gerado para especificar o valor padrão.
kxhitiz
45
t.integer :retweets_count, :default => 0

... Deveria trabalhar.

Veja o guia Rails sobre migrações

Jits
fonte
9

Sim, também não consegui ver como usar 'default' no comando do gerador de migração, mas fui capaz de especificar um valor padrão para uma nova coluna de string da seguinte forma, corrigindo o arquivo de migração gerado antes de aplicar "rake db: migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

Isso adiciona uma nova coluna chamada 'cor' ao meu modelo de 'Widget' e define a 'cor' padrão dos novos widgets como 'vermelho'.

MSC
fonte
(Isso foi no Rails 4.2.)
MSC de
4

Tentei t.boolean: active,: default => 1 no arquivo de migração para criar a tabela inteira. Depois de executar essa migração quando fiz o check-in do banco de dados, ele fez como nulo. Mesmo que eu tenha dito o padrão como "1". Depois disso, mudei um pouco o arquivo de migração como este, então funcionou para mim definir o valor padrão no arquivo de migração de tabela de criação.

t.boolean: ativo,: null => false,: default => 1. Funcionou para mim.

A versão do meu framework Rails é 4.0.0

Madhan Ayyasamy
fonte
:default => false?
Christopher Oezbek
2

Você teria que primeiro criar sua migração para os fundamentos do modelo e depois criar outra migração para modificar a anterior usando change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
Artur Pedrosa
fonte