生成具有所有RESTful功能的控制器


86

我正在尝试生成具有所有RESTful操作的控制器。我在Wikibooks上读过-Ruby on Rails,我所需要做的就是用控制器名称调用生成器,而我会得到的。所以,我跑了,script/generate rspec_controller Properties但是控制器空了。

任何其他建议将不胜感激。


1
thenduks,如果我像您一样有经验,那是对的,但我什至不知道我脑海中浮现出这7个宁静的动作,因此我必须先搜索该项目,然后在页面和我的页面之间来回切换应用程序来输入每个。一旦我认识了他们,我同意您的解决方案会更容易
Barb

Answers:


143

我不知道自动执行此操作的方法,但是如果您这样做:

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

所有这些都将为您创建

Rails 4的更新

rails g scaffold_controller Property

7
好答案。专家可以忽略其余部分。给新手的提示-如果您误以为我将控制器命名为PropertyController :),您将获得PropertyController控制器:)
Barb 2010年

2
我的回答完全相同-除非您不需要指定所有默认的7个动作。
konung 2010年

4
请注意...这只会生成一个具有为基本CRUD动作命名的方法的控制器。路线距离RESTful远...例如route get "mycontroller/create"(create应该是发布)
rthbound 2012年

我同意这个答案更适合于通用的自定义操作,它实际上并不遵守所需的RESTful约定。
prusswan

这个答案已经过时了轨道4.看konung的回答为Rails 4
toobulkeh

97

在Rails 3中也有rails generate scaffold_controller ...。更多信息在这里


1
我更喜欢这种方法,因为它会生成RESTful路由。使用rails g controller Foos create会生成get '/create'根本不是RESTful的路由。
rthbound 2012年

37

编辑(由于一些评论):最初的问题是在2010年-因此答案不是针对RAILS 4,而是针对Rails 2!

尝试使用脚手架。

script/generate scaffold controller Properties

Ruby On Rails的官方文档部分

我敢肯定,如果您在Google Rails脚手架上进行搜索,就会找到更多信息。希望能有所帮助。

编辑: 对于铁路4

rails g scaffold_controller Property


您可以脚本/生成rspec_scaffold控制器属性吗?
Barb 2010年

是的,你可以。下面是详细信息/教程:blog.davidchelimsky.net/2007/05/14/...
konung

我怀疑这个答案对于Rails的最新版本已经过时了。它将简单地为称为“控制器”的对象/模型创建整个支架
prusswan 2013年

4
是的,这是在2010年为版本2编写的。现在(Rails 4)将如下所示:rails g scaffold_controller属性(scaffold_controller将调用脚手架,您需要提供模型名称(单数),但不必这样做)
konung

2
我可以验证它也rails g scaffold_controller Property可以在Rails 3.2中工作。这将创建一个具有全部7个默认RESTful动作及其各自视图的PropertiesController,而无需模型。
mkralla11

15

在Rails 4/5中,以下命令为我完成了窍门。

rails g scaffold_controller Property --skip-template-engine

它生成了控制器动作,但没有生成视图。


9

Rails 5.1

初始点:

您已经创建无控制器的模型,也没有意见(如通:rails generate model category

目的:

升级到完整的RESTful资源

命令:

rails generate scaffold_controller category

它对脚手架控制器,其七个RESTful动作和相关视图进行了处理。(注意:您可以传递模型名称CamelCased或under_scored。)

输出:

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

您正在寻找脚手架。

尝试:

script/generate scaffold Property

这将为您提供控制器,模型,迁移和相关测试。您可以使用选项跳过迁移--skip-migration。如果您不想其他人,则必须自己删除它们。不必担心会覆盖现有文件,除非您使用,否则不会发生--force

klew在注释中指出,这还为您定义了方法主体,而不仅仅是名称。用作REST控制器的起点非常有帮助。


@Barb,我认为脚手架将对您更好,因为它不仅声明了所有功能,而且还定义了所有功能。最好至少创建一次并以它们为例。
klew 2010年

6

在Rails 4中 rails g controller apps new create update edit destroy show index

或者,rails generate controller apps new create update edit destroy show index如果您想写出完整的学期:)。


对于名称较长的控制器(如line_items),rails g控制器LineItems
Tommyixi 2015年

1
您可以rails g scaffold_controller apps在Rails 4中使用
wrdevos

2

脚本/生成rspec_scaffold属性


是的,我意识到您已经接受了有关此问题的答案,但是我认为该解决方案也可能会帮助一些阅读此帖子的人....上面的解决方案将创建模型等,您可以在以下情况下将其删除您不需要
stephenmurdoch

0

除通过脚手架外,没有其他方法(据我所知?已记录?)。但是您可以这样做:

script/generate controller WhateverController new create edit update destroy show

好的答案,我认为您缺少一个动作,没有7个动作吗?
Barb 2010年

0

一种解决方案是创建一个脚本,该脚本接受一个参数(控制器名称),然后让脚本为您键入整个命令。


  1. 创建一个新文件,例如railsgcontroller
  2. 使它可执行并保存在路径上
  3. 像这样运行:$ railsgcontroller文章

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.