Em uma aplicação Ruby on Rails, quando vamos gerar migrations várias vezes queremos que os atributos a ser gerados tenham limite, precisão, entre outras opções.
Para facilitar essa modificação o Rails criou os type modifiers
.
Abaixo temos uma migration de exemplo usando estes modificadores:
rails g migration add_attributes_to_some_table pseudo:string{50} 'decimal_number:decimal{4,2}' \
username:string{30}:uniq commentable:belongs_to{polymorphic}
Note que quando usamos a notação
{4,2}
esta parte está dentro de aspas porque o bash, o zsh e outros Shells mapeiam esse tipo de comando paradecimal4
edecimal2
caso isso não seja feito.
Que gera a seguinte migration:
class AddAttributesToSomeTable < ActiveRecord::Migration[6.0]
def change
add_column :some_tables, :pseudo, :string, limit: 50
add_column :some_tables, :decimal_number, :decimal, precision: 4, scale: 2
add_column :some_tables, :username, :string, limit: 30
add_index :some_tables, :username, unique: true
add_reference :some_tables, :commentable, polymorphic: true, null: false
end
end
Em colunas do tipo string
, text
, binary
ou integer
o modificador altera o limite. Nas colunas do tipo decimal
podemos alterar a precisão e escala. Em colunas do tipo belongs_to
(ou references
) podemos incluir a mudança para polymorphic association.
Além disso temos o :uniq
, que não permite valores duplicados e :index
, que inclui um índice para este campo.
Outra opção interessante é o comment
, null
e default
que não tem opção de uso com os geradores mas podemos editar no arquivo, exemplo abaixo:
class AddAttributesToSomeTable < ActiveRecord::Migration[6.0]
def change
add_column :some_tables, :pseudo, :string, comment: 'Pseudo text for an attribute'
add_column :some_tables, :a_number, :integer, null: 0, default: 0
end
end