ruby on rails - generate - ¿Cómo generar un andamio para el tipo de datos con "descripción adicional" en Rails 3?
ruby on rails rake (6)
De Ruby on Rails: el mejor método de manejo de moneda / dinero , ¿cómo generar un andamio para lo siguiente?
add_column :items, :price, :decimal, :precision => 8, :scale => 2
Como:
rails generate scaffold LineItem name:string /
price:decimal {:precision => 8, :scale => 2}
Además, ¿cuál es el término correcto para "descripción adicional" para el tipo decimal?
Trabajando en Rails 3.07, Ruby 1.92
Así es como lo hice:
rails generate scaffold LineItem ... amount:decimal ...
Los ...
son cualquier otro campo que necesitemos en el andamio, como date:date
, item:string
, category:references
...
Luego modifiqué la migración para que pareciera:
create_table :line_items do |t|
.
.
.
t.decimal :amount, :precision => 8, :scale => 2
Entonces
rake db:migrate
Esto mantiene valores entre -999,999.99 y 999,999.99.
Aquí hay una referencia útil (marginalmente): http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html
Casi un año después. Rieles 3.2.11. Cáscara de bash regular. El andamio de rieles crea un desorden con la sintaxis nombre_campo: decimal {p, s} independientemente del guides.rubyonrails.org/3_2_release_notes.html#railties de guides.rubyonrails.org/3_2_release_notes.html#railties . La confusión radica en el simple hecho de que las llaves son meta-caracteres en bash (así como en otros shells) y deben ser eliminados. Ver el problema registrado 4602 en el repositorio del generador de andamios.
Si usa bash, use el punto en lugar de la coma como solución alternativa.
Sintaxis correcta del andamio nombre_campo: decimal {ps}
Esta es la forma más simple y precisa de hacerlo en Rails 5.x:
rails generate scaffold LineItem name price:decimal{''8,2''}
Preste especial atención a las comillas simples utilizadas al especificar la escala y la precisión.
Nuevo enfoque:
Cree la migración con solo add_column, por ejemplo, los rails generate migration AddPriceToLineItem price:integer
Luego edite la migración y modifíquela para que se adapte a sus necesidades, por ejemplo,
add_column :line_items, :price, :decimal, :precision => 8, :scale => 2
Lograr que la línea de comando sea exactamente correcta para hacer esto ha demostrado ser un gran ejercicio de frustración y una pérdida de tiempo para mí en el pasado. Te recomiendo seguir este procedimiento y seguir adelante.
Unos años más tarde, con Rails 4.2 y bash (Linux), el siguiente comando del generador funciona sin problemas:
bin/rails generate scaffold LineItem name:string price:decimal{8.2}
Esto generará correctamente la siguiente migración de ejemplo:
class CreateLineItems < ActiveRecord::Migration
def change
create_table :line_items do |t|
t.string :name
t.decimal :price, precision: 8, scale: 2
t.timestamps null: false
end
end
end
En Rails 3.1 y más abajo, la sintaxis es
rails generate scaffold LineItem name:string price:decimal
y luego agregar manualmente las propiedades decimales al archivo de migración
t.decimal :price, :precision => 8, :scale => 2
En Rails 3.2 , uno puede especificar las propiedades decimales
rails generate scaffold LineItem name price:decimal{8,2}
NOTA: Si está ejecutando ZSH , la sintaxis requiere un guión en lugar de una coma.
rails generate scaffold LineItem name price:decimal{8-2}
OTRA NOTA: Si está usando bash en Mac OS X 10.9, pruebe un punto en lugar de la coma.
rails generate scaffold LineItem name price:decimal{8.2}