Genera un controller con tutte le funzioni RESTful


86

Sto cercando di generare un controller con tutte le azioni RESTful bloccate. Avevo letto su Wikibooks - Ruby on Rails che tutto quello che dovevo fare era chiamare il generatore con il nome del controller e avrei ottenuto proprio quello. Quindi, ho corso script/generate rspec_controller Propertiesma ho un controller vuoto.

Eventuali altri suggerimenti notevolmente sarebbero apprezzati.


1
thenduks, se fossi esperto come te sarebbe vero, ma non conosco nemmeno le 7 azioni riposanti sopra la mia testa, quindi dovrei cercare su Google l'elemento e poi passare avanti e indietro tra la pagina e la mia app per entrare in ognuno. Una volta che li conosco, sono d'accordo che la tua soluzione è più semplice
Barb

Risposte:


143

Non conosco un modo automatizzato per farlo, ma se lo fai:

script/generate controller your_model_name_in_plural new create update edit destroy index show

Tutti saranno creati per te

Aggiornamento per Rails 4

rails g scaffold_controller Property

7
Bella risposta. Gli esperti possono ignorare il resto. Nota per i niubbi - se chiami il tuo controller PropertyController come ho frainteso :) otterrai PropertyController Controller :)
Barb

2
La mia risposta fa esattamente la stessa cosa, tranne per il fatto che non è necessario specificare tutte le 7 azioni predefinite.
konung

4
Solo una nota ... questo genera solo un controller con metodi denominati per azioni CRUD di base. Le rotte sono tutt'altro che RESTful ... es route get "mycontroller/create"(create should be a post)
rthbound

Sono d'accordo che questa risposta è più adatta per azioni personalizzate generiche, in realtà non rispetta la convenzione RESTful desiderata.
Prusswan

Questa risposta è obsoleta per rails 4. Vedi la risposta di
Konung

97

In Rails 3 c'è anche rails generate scaffold_controller .... Maggiori info qui .


1
Preferisco questo metodo in quanto genera percorsi RESTful. L'utilizzo rails g controller Foos creategenererebbe un percorso per il get '/create'quale non è affatto RESTful.
rthbound

37

EDIT (a causa di alcuni commenti) : La domanda originale era nel 2010 - quindi la risposta NON è per RAILS 4, ma per binari 2 !!

prova a usare le impalcature.

script/generate scaffold controller Properties

Sezione di documenti ufficiali su Ruby On Rails

Sono sicuro che puoi trovare maggiori informazioni se fai una ricerca su google sui ponteggi a rotaia. Spero che aiuti.

MODIFICA: per RAILS 4

rails g scaffold_controller Property


puoi script / generare le proprietà del controller rspec_scaffold?
Barb

si potresti. Ecco informazioni dettagliate / tutorial: blog.davidchelimsky.net/2007/05/14/…
konung

Sospetto che questa risposta sia obsoleta per le versioni recenti di Rails.
Creerà

4
Sì, è stato scritto nel 2010 per la versione 2.qualcosa come segue dalla domanda. Ora (Rails 4) sarebbe simile a questo: rails g scaffold_controller Property (scaffold_controller richiamerebbe scaffolding ed è necessario fornire il nome del modello (singolare), ma non è necessario)
konung

2
Posso verificare che rails g scaffold_controller Propertyfunzioni anche in rails 3.2. Questo creerà un PropertiesController con TUTTE le 7 azioni RESTful predefinite e le rispettive viste, senza un modello.
mkralla11

15

In Rails 4/5 il seguente comando fa il trucco per me.

rails g scaffold_controller Property --skip-template-engine

Ha generato le azioni del controller ma non la vista.


9

Rotaie 5.1

Punto di partenza:

È stato creato un modello senza un controller, né di vista (ad esempio attraverso: rails generate model category)

Obbiettivo:

Aggiornalo a una risorsa RESTful completa

Comando:

rails generate scaffold_controller category

Spegne un controller con scaffolding, le sue sette azioni RESTful e le visualizzazioni correlate. (Nota: puoi passare il nome del modello CamelCased o under_scored.)

Produzione:

varus@septimusSrv16DEV4:~/railsapps/dblirish$ rails generate scaffold_controller category
Running via Spring preloader in process 45681
      create  app/controllers/categories_controller.rb
      invoke  erb
      create    app/views/categories
      create    app/views/categories/index.html.erb
      create    app/views/categories/edit.html.erb
      create    app/views/categories/show.html.erb
      create    app/views/categories/new.html.erb
      create    app/views/categories/_form.html.erb
      invoke  test_unit
      create    test/controllers/categories_controller_test.rb
      invoke  helper
      create    app/helpers/categories_helper.rb
      invoke    test_unit
      invoke  jbuilder
      create    app/views/categories/index.json.jbuilder
      create    app/views/categories/show.json.jbuilder
      create    app/views/categories/_category.json.jbuilder

7

Stai cercando un'impalcatura.

Provare:

script/generate scaffold Property

Questo ti darà un controller, un modello, una migrazione e relativi test. Puoi saltare la migrazione con l'opzione --skip-migration. Se non vuoi gli altri, dovrai eliminarli tu stesso. Non preoccuparti di sovrascrivere i file esistenti, ciò non accadrà se non usi --force.

Come sottolinea klew nei commenti, questo definisce anche i corpi del metodo per te, non solo i nomi. È molto utile da utilizzare come punto di partenza per il controller REST.


@Barb, penso che le impalcature sarebbero migliori per te poiché non solo dichiara tutte le funzioni ma le definisce anche. È bene crearli almeno una volta e averli come esempio.
klew

6

In Rails 4 è rails g controller apps new create update edit destroy show index

O rails generate controller apps new create update edit destroy show indexse vuoi scrivere l'intero termine :).


E per i controller con un nome più lungo (come line_items), rails g controller LineItems
Tommyixi

1
Puoi semplicemente usarlo rails g scaffold_controller appsin Rails 4
wrdevos

2

script / genera proprietà rspec_scaffold


e sì, mi rendo conto che hai già accettato una risposta su questo, ma credo che questa soluzione potrebbe aiutare alcune persone che leggono anche questo post .... la soluzione sopra creerà un modello ecc., che puoi semplicemente eliminare se non hai bisogno
stephenmurdoch

0

Non c'è modo (che io sappia? Che è documentato?) Per spegnere un controller se non attraverso lo scaffolding. Ma potresti fare:

script/generate controller WhateverController new create edit update destroy show

Ottima risposta, penso che ti manchi un'azione non ci sono 7 azioni?
Barb

0

Una soluzione è creare uno script che accetti un parametro, il nome del controller, e lasciare che lo script digiti l'intero comando per te.


  1. Crea un nuovo file, diciamo, railsgcontroller
  2. Rendilo eseguibile e salvalo sul percorso
  3. Eseguilo come: $ railsgcontroller Articoli

die () {
    echo "Please supply new rails controller name to generate."
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided"

rails g controller "$1" new create update edit destroy show index
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.