Gere um controlador com todas as funções RESTful

86

Estou tentando gerar um controlador com todas as ações RESTful fragmentadas. Eu tinha lido no Wikibooks - Ruby on Rails que tudo que eu precisava fazer era chamar o gerador com o nome do controlador e eu conseguiria exatamente isso. Então, eu corri, script/generate rspec_controller Propertiesmas tenho um controlador vazio.

Quaisquer outras sugestões seriam muito apreciadas.

Barb
fonte
1
Então, se eu fosse tão experiente quanto você, isso seria verdade, mas eu nem mesmo conheço as 7 ações repousantes do topo da minha cabeça, então eu teria que pesquisar o item no Google e, em seguida, alternar entre a página e meu aplicativo para inserir cada um. Depois de conhecê-los, concordo que sua solução é mais fácil
Barb,

Respostas:

143

Não sei sobre uma maneira automatizada de fazer isso, mas se você souber:

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

Todos eles serão criados para você

Atualização para Rails 4

rails g scaffold_controller Property
Marcos Placona
fonte
7
Ótima resposta. Os especialistas podem ignorar o resto. Nota para iniciantes - se você nomear seu controlador PropertyController como eu não entendi :) você receberá PropertyController Controller :)
Barb
2
Minha resposta faz exatamente a mesma coisa - exceto que você não precisa especificar todas as 7 ações padrão.
konung
4
Apenas uma observação ... isso só gera um controlador com métodos nomeados para ações básicas do CRUD. As rotas estão longe de serem RESTful ... por exemplo, route get "mycontroller/create"(criar deve ser um post)
rthbound
Eu concordaria que essa resposta é mais adequada para ações customizadas genéricas, ela não respeita a convenção RESTful desejada.
prusswan
Esta resposta está desatualizada para o Rails 4. Veja a resposta de Konung para o Rails 4.
toobulkeh
97

No Rails 3 também existe rails generate scaffold_controller .... Mais informações aqui .

gdelfino
fonte
1
Eu prefiro esse método porque ele gera rotas RESTful. Usar rails g controller Foos creategeraria uma rota para a get '/create'qual não é RESTful.
rthbound
37

EDITAR (devido a alguns comentários) : A pergunta original foi em 2010 - portanto, a resposta NÃO é para o RAILS 4, mas para o rails 2 !!

tente usar andaimes.

script/generate scaffold controller Properties

Seção de documentos oficiais em Ruby On Rails

Tenho certeza que você pode encontrar mais informações se fizer uma pesquisa no google sobre andaimes de trilhos. Espero que ajude.

EDITAR: Para RAILS 4

rails g scaffold_controller Property

Konung
fonte
você pode criar script / gerar propriedades do controlador rspec_scaffold?
Barb,
sim você pode. Aqui está o tutorial / informações detalhadas: blog.davidchelimsky.net/2007/05/14/…
konung
Eu suspeito que esta resposta está desatualizada para versões recentes do Rails. Ele simplesmente criará um andaime inteiro para o objeto / modelo chamado "controlador"
prusswan
4
Sim, isso foi escrito em 2010 para a versão 2. algo como segue da pergunta. Agora (Rails 4) ficaria assim: rails g propriedade scaffold_controller (scaffold_controller iria invocar scaffolding e você precisa fornecer o nome do modelo (singular), mas não precisa)
konung
2
Posso verificar que rails g scaffold_controller Propertyfunciona no rails 3.2 também. Isso criará um PropertiesController com TODAS as 7 ações RESTful padrão e suas respectivas visualizações, sem um modelo.
mkralla11
15

No Rails 4/5, o seguinte comando faz o truque para mim.

rails g scaffold_controller Property --skip-template-engine

Ele gerou as ações do controlador, mas não a visualização.

pmargreff
fonte
9

Rails 5.1

Ponto de partida:

Você criou um modelo sem um controlador, nem pontos de vista (por exemplo, através de: rails generate model category)

Objetivo:

Faça upgrade para um recurso RESTful completo

Comando:

rails generate scaffold_controller category

Ele stubs um controlador de scaffold, suas sete ações RESTful e visualizações relacionadas. (Nota: Você pode passar o nome do modelo CamelCased ou under_scored.)

Resultado:

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
Varus Septimus
fonte
7

Você está procurando um andaime.

Tentar:

script/generate scaffold Property

Isso lhe dará um controlador, um modelo, uma migração e testes relacionados. Você pode pular a migração com a opção --skip-migration. Se você não quiser os outros, terá que excluí-los você mesmo. Não se preocupe em sobrescrever arquivos existentes, isso não acontecerá a menos que você use --force.

Como klew aponta nos comentários, isso também define os corpos dos métodos para você, não apenas os nomes. É muito útil usar como ponto de partida para o controlador REST.

molf
fonte
@Barb, acho que Scaffolding seria melhor para você, pois não apenas declara todas as funções, mas também as define. É bom criá-los pelo menos uma vez e tê-los como exemplo.
klew
6

No Rails 4 é rails g controller apps new create update edit destroy show index

Ou rails generate controller apps new create update edit destroy show indexse você quiser escrever o termo completo :).

Tom Hammond
fonte
E para controladores com um nome mais longo (como line_items), controlador rails g LineItems
Tommyixi
1
Você pode apenas usar rails g scaffold_controller appsno Rails 4
wrdevos
2

script / generate rspec_scaffold Property

Stephenmurdoch
fonte
e sim, percebo que você já aceitou uma resposta sobre este, mas acho que esta solução pode ajudar algumas pessoas que leem este post também .... a solução acima irá criar um modelo etc, que você pode simplesmente deletar se você não precisa
stephenmurdoch
0

Não há nenhuma maneira (que eu conheço? Que está documentado?) De remover um controlador, exceto por meio de andaimes. Mas você poderia fazer:

script/generate controller WhateverController new create edit update destroy show
Rfunduk
fonte
Ótima resposta, acho que você está perdendo uma ação, não há 7 ações?
Barb,
0

Uma solução é criar um script que aceite um parâmetro, o nome do controlador, e deixar que o script digite o comando inteiro para você.


  1. Crie um novo arquivo, digamos, railsgcontroller
  2. Torne-o executável e salve-o no caminho
  3. Execute-o como: $ railsgcontroller Articles

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
philippinedev
fonte