¿Cómo ejecutar `rails generate scaffold` cuando el modelo ya existe?

332

Soy nuevo en Rails, por lo que mi proyecto actual está en un estado extraño.

Una de las primeras cosas que generé fue un modelo de "Película". Luego comencé a definirlo con más detalle, agregué algunos métodos, etc.

Ahora me doy cuenta de que debería haberlo generado rails generate scaffoldpara conectar cosas como el enrutamiento, las vistas, el controlador, etc.

Intenté generar el andamiaje pero recibí un error que indica que ya existe un archivo de migración con el mismo nombre.

¿Cuál es la mejor manera para mí de crear andamios para mi "Película" ahora? (usando rieles 3)

Lan
fuente
1
Probablemente sea mejor escribir sus propios controladores, vistas y rutas. Aprenderá más sobre los conceptos
Ben Aubin,
1
De acuerdo con @ penne12. Al menos al principio, hasta que se sienta cómodo con los conceptos, para que sepa qué está haciendo todo el código que se genera para usted.
mydoghasworms
No es directamente relevante, pero si alguna vez te equivocas, usa rails destroy <etc>. Recuerdo que esto fue realmente útil cuando comencé.
Helsing
1
@BenAubin, si bien es cierto, la belleza de Rails es no tener que escribir continuamente repetitivo.
Romuloux

Respuestas:

596

TL; DR :rails g scaffold_controller <name>

Aunque ya tiene un modelo, aún puede generar el controlador necesario y los archivos de migración utilizando la rails generateopción. Si ejecuta rails generate -h, puede ver todas las opciones disponibles para usted.

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

Si desea generar un andamio de controlador para su modelo, consulte scaffold_controller. Solo por claridad, aquí está la descripción al respecto:

Apaga un controlador andamiaje y sus vistas. Pase el nombre del modelo, CamelCased o under_scored, y una lista de vistas como argumentos. El nombre del controlador se recupera como una versión pluralizada del nombre del modelo.

Para crear un controlador dentro de un módulo, especifique el nombre del modelo como una ruta como 'parent_module / controller_name'.

Esto genera una clase de controlador en la aplicación / controladores e invoca ayudante, motor de plantillas y generadores de marcos de prueba.

Para crear su recurso, usaría el resourcegenerador, y para crear una migración, también puede ver el migrationgenerador (vea, hay un patrón para toda esta locura). Estos proporcionan opciones para crear los archivos que faltan para construir un recurso. Alternativamente, puede ejecutar rails generate scaffoldcon la --skipopción de omitir cualquier archivo que exista :)

Recomiendo pasar un tiempo mirando las opciones dentro de los generadores. Son algo que no creo que estén documentados extremadamente bien en libros y demás, pero son muy útiles.

Lee Jarvis
fuente
12
wow, una de las mejores respuestas que he recibido a una pregunta de programación. ¡Gracias!
Lan
12
También tengo modelos existentes y, al hacerlo rails generate scaffold_controller MyModel, genera la capa de vista, pero no incluye los atributos del modelo (columnas de la tabla) y debe agregarlos a mano. ¿Alguien sabe de una solución para esto? Estoy en Rails 3.2.8.
aaronbartell
@aaronbartell Le estás pidiendo a Rails que genere un 'scaffold_controller' que no se preocupa por los atributos del modelo. Esto no está roto, si quieres que se genere un modelo también, entonces quieres generate scaffoldsi tienes un modelo pero quieres un controlador de andamio y nuevos atributos agregados a un modelo que deseas scaffold_generatorseguido por migrationlos campos que estás alterando
Lee Jarvis
99
@Lee: ningún aaronbartell pregunta por qué scaffold_controller no genera las entradas de vista correspondientes a los atributos existentes del modelo que se le pasó, lo cual es una pregunta válida ... stackoverflow.com/q/17153864/165673
Yarin
67

Gran respuesta de Lee Jarvis, este es solo el comando, por ejemplo; ya tenemos un modelo existente llamado Usuario:

rails g scaffold_controller User
tokhi
fuente
10
¡Gracias por aquellos de nosotros que somos demasiado flojos para leer párrafos de texto!
Chris Cirefice
30

Para aquellos que inician una aplicación de rieles con una base de datos existente, existe una gema genial llamada schema_to_scaffoldpara generar un script de andamio. produce:

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

desde su schema.rbnuestro su renombrado schema.rb. Verificarlo

frenesim
fuente
2
Esta es una gran joya, ¡me ayudará mucho! ¡Debería estar integrado en Rails!
Peter Andersson el
13

En Rails 5 , aún puedes ejecutar

$rails generate scaffold movie --skip

para crear todos los archivos de andamio faltantes o

rails generate scaffold_controller Movie

para crear el controlador y ver solo.

Para una mejor explicación, consulte el andamio de rieles

Nesha Zoric
fuente
12

Este comando debería hacer el truco:

$ rails g scaffold movie --skip
Andrew Hendrie
fuente
10

Puede utilizar scaffold_controllery recordar pasar attributesel modelo, o se generará un andamio sin los atributos.

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

Este comando generará los siguientes archivos:

create  app/controllers/users_controller.rb
invoke  haml
create    app/views/users
create    app/views/users/index.html.haml
create    app/views/users/edit.html.haml
create    app/views/users/show.html.haml
create    app/views/users/new.html.haml
create    app/views/users/_form.html.haml
invoke  test_unit
create    test/controllers/users_controller_test.rb
invoke  helper
create    app/helpers/users_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/users/index.json.jbuilder
create    app/views/users/show.json.jbuilder
Deepak Mahakale
fuente