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


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 con rails generate scaffold para conectar cosas como el enrutamiento, las vistas, el controlador, etc.

Traté de generar el andamiaje, pero recibí un error diciendo 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? (utilizando rails 3)

Author: peak, 2010-12-02

6 answers

TL;DR: rails g scaffold_controller <name>

A pesar de que ya tiene un modelo, aún puede generar el controlador y los archivos de migración necesarios utilizando la opción rails generate. 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 scaffold de controlador para su modelo, consulte scaffold_controller. Solo para mayor claridad, aquí está la descripción de eso:

Extrae un controlador scaffoldeado y sus vistas. Pasar el nombre del modelo, bien camelCased o under_scored, y una lista de vistas como argumentos. El nombre del controlador se recupera como una versión pluralizada del modelo nombre.

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

Esto genera una clase controller en app / controllers e invoca helper, motores de plantillas y generadores de marcos de prueba.

Para crear tu recurso, usarías el resource generador, y para crear una migración, también se puede ver el generador migration (ver, hay un patrón a toda esta locura). Estos proporcionan opciones para crear los archivos que faltan para construir un recurso. Alternativamente, puede ejecutar rails generate scaffold con la opción --skip para omitir cualquier archivo que exista:)

Recomiendo pasar algún tiempo mirando las opciones dentro de los generadores. Son algo que no creo que estén muy bien documentados en libros y cosas así, pero son muy útiles.

 555
Author: Lee Jarvis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 09:49:27

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

rails g scaffold_controller User
 61
Author: tokhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-02 19:42:35

Para los que inician una aplicación rails con una base de datos existente, hay una gema genial llamada schema_to_scaffold para generar un script de scaffold. salidas:

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

Desde su schema.rb nuestro su renombrado schema.rb. Compruébalo

 28
Author: frenesim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 08:10:38

Este comando debería hacer el truco:

$ rails g scaffold movie --skip
 12
Author: Andrew Hendrie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 08:21:14

Puede hacer uso de scaffold_controller y recuerde pasar el attributes del modelo, o se generará scaffold 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
 7
Author: Deepak Mahakale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 12:46:00

En Rails 5 , todavía se puede ejecutar

$rails generate scaffold movie --skip

Para crear todos los archivos de scaffold que faltan o

rails generate scaffold_controller Movie

Para crear el controlador y ver solamente.

Para una mejor explicación echa un vistazo rails scaffold

 3
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 10:55:12