Come eseguire `rails generate scaffold` quando il modello esiste già?


332

Sono nuovo di Rails, quindi il mio progetto attuale è in uno stato strano.

Una delle prime cose che ho generato è stato un modello "Movie". Ho quindi iniziato a definirlo in modo più dettagliato, ho aggiunto alcuni metodi, ecc.

Ora capisco che avrei dovuto generarlo rails generate scaffoldper collegare cose come il routing, le viste, il controller, ecc.

Ho provato a generare l'impalcatura ma ho ricevuto un errore che indica che esiste già un file di migrazione con lo stesso nome.

Qual è il modo migliore per me di creare impalcature per il mio "film" ora? (usando le guide 3)


1
Probabilmente è meglio scrivere i propri controller, viste e percorsi. Imparerai di più sui concetti
Ben Aubin,

1
Concordo con @ penne12. Almeno all'inizio, fino a quando non ti sentirai a tuo agio con i concetti, in modo da sapere cosa sta facendo tutto il codice che viene generato per te.
mydoghasworms

Non direttamente pertinente, ma in caso di errori, utilizzare rotaieestro <etc>. Ricordo che è stato davvero utile quando ho iniziato.
Helsing,

1
@BenAubin, mentre è vero, il bello di Rails è di non dover scrivere continuamente sulla piastra di cottura.
Romuloux,

Risposte:


596

TL; DR :rails g scaffold_controller <name>

Anche se hai già un modello, puoi comunque generare il controller e i file di migrazione necessari usando l' rails generateopzione. Se corri rails generate -hpuoi vedere tutte le opzioni disponibili.

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

Se desideri generare uno scaffold del controller per il tuo modello, vedi scaffold_controller. Solo per chiarezza, ecco la descrizione al riguardo:

Tronca un controller impalcato e le sue opinioni. Passa il nome del modello, CamelCased o under_scored, e un elenco di viste come argomenti. Il nome del controller viene recuperato come versione pluralizzata del nome del modello.

Per creare un controller all'interno di un modulo, specificare il nome del modello come percorso come 'parent_module / controller_name'.

Ciò genera una classe di controller in app / controller e invoca helper, motore di template e generatori di framework di test.

Per creare la tua risorsa, dovresti usare il resourcegeneratore e per creare una migrazione, puoi anche vedere il migrationgeneratore (vedi, c'è un modello per tutta questa follia). Questi forniscono opzioni per creare i file mancanti per creare una risorsa. In alternativa puoi semplicemente eseguire rails generate scaffoldcon l' --skipopzione per saltare tutti i file esistenti :)

Consiglio di passare un po 'di tempo a guardare le opzioni all'interno dei generatori. Sono qualcosa che non credo siano documentati molto bene nei libri e simili, ma sono molto utili.


12
wow, una delle migliori risposte che abbia mai avuto a una domanda di programmazione. Grazie!
Lan

12
Ho anche modelli esistenti e fare rails generate scaffold_controller MyModelgenera il livello di visualizzazione ma non include gli attributi del modello (colonne della tabella) e devi aggiungerli manualmente. Qualcuno sa di una soluzione per questo? Sono su Rails 3.2.8.
aaronbartell,

@aaronbartell Stai chiedendo a Rails di generare un 'scaffold_controller' a cui non interessano gli attributi del modello. Questo non è rotto, se vuoi generare anche un modello, allora vuoi generate scaffoldse hai un modello ma vuoi un controller di impalcatura e nuovi attributi aggiunti a un modello che vuoi scaffold_generatorseguito da migrationcon i campi che stai modificando
Lee Jarvis

9
@Lee - Nessun aaronbartell sta chiedendo come mai lo scaffold_controller non genera gli input di vista corrispondenti per gli attributi esistenti del modello che gli è stato passato, che è una domanda valida ... stackoverflow.com/q/17153864/165673
Yarin,

67

Ottima risposta Lee Jarvis, questo è solo il comando ad es. abbiamo già un modello esistente chiamato Utente:

rails g scaffold_controller User

10
Grazie, per quelli di noi troppo pigri per leggere paragrafi di testo!
Chris Cirefice,

30

Per quelli che avviano un'app di rotaie con un database esistente c'è una gemma interessante chiamata schema_to_scaffoldper generare uno script di scaffold. produce:

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

dal schema.rbnostro nostro il tuo rinominato schema.rb. Check it


2
Questa è una grande gemma, mi aiuterà molto! Dovrebbe essere integrato in Rails!
Peter Andersson,

13

In Rails 5 , puoi ancora eseguire

$rails generate scaffold movie --skip

per creare tutti i file di impalcatura mancanti o

rails generate scaffold_controller Movie

per creare il controller e solo visualizzare.

Per una migliore spiegazione dai un'occhiata all'impalcatura delle rotaie



10

È possibile utilizzare scaffold_controllere ricordare di passare attributesil modello oppure lo scaffold verrà generato senza gli attributi.

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

Questo comando genererà i seguenti file:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.