【问题标题】:Generate a controller with all the RESTful functions生成具有所有 RESTful 功能的控制器
【发布时间】:2011-01-31 00:57:15
【问题描述】:

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

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

【问题讨论】:

  • thenduks,如果我和你一样有经验,那将是真的,但我什至不知道我头顶上的 7 个安静的动作,所以我不得不谷歌该项目然后切换在页面和我的应用程序之间来回输入每个。一旦我了解他们,我同意您的解决方案更简单

标签: ruby-on-rails controller rest rspec


【解决方案1】:

在 Rails 4/5 中,以下命令对我有用。

rails g scaffold_controller Property --skip-template-engine

它生成控制器动作,但不生成视图。

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

      我不知道自动化的方式,但如果你这样做:

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

      将为您创建所有这些

      Rails 4 更新

      rails g scaffold_controller Property
      

      【讨论】:

      • 很好的答案。专家可以忽略其余部分。新手注意 - 如果您将控制器命名为我误解的 PropertyController :) 您将获得 PropertyController Controller :)
      • 我的回答完全一样——除了你不需要指定所有默认的 7 个动作。
      • 请注意...这只会生成一个控制器,其中包含为基本 CRUD 操作命名的方法。路线远非 RESTful ......例如route get "mycontroller/create"(创建应该是一个帖子)
      • 我同意这个答案更适合通用自定义操作,它实际上并不尊重所需的 RESTful 约定。
      • 此答案对于 Rails 4 已过时。请参阅 konung 对 Rails 4 的答案。
      【解决方案4】:

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


      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
      

      【讨论】:

        【解决方案5】:

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

        尝试使用脚手架。

        script/generate scaffold controller Properties
        

        Section of Official docs on Ruby On Rails

        如果您在 Rails 脚手架上进行谷歌搜索,我相信您可以找到更多信息。希望对您有所帮助。

        编辑: 对于 RAILS 4

        rails g scaffold_controller Property

        【讨论】:

        • 你可以编写/生成 rspec_scaffold 控制器属性吗?
        • 是的,你可以。这是详细信息/教程:blog.davidchelimsky.net/2007/05/14/…
        • 我怀疑这个答案对于最新版本的 Rails 来说已经过时了。它只会为名为“控制器”的对象/模型创建一个完整的脚手架
        • 是的,它是在 2010 年为版本 2 编写的。问题如下。现在(Rails 4)它看起来像这样: rails g scaffold_controller 属性(scaffold_controller 将调用脚手架,您需要提供模型名称(单数),但不必)
        • 我可以验证rails g scaffold_controller Property 也适用于rails 3.2。这将创建一个包含所有 7 个默认 RESTful 操作及其各自视图的 PropertiesController,而无需模型。
        【解决方案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 controller LineItems
        • 你可以在 Rails 4 中使用rails g scaffold_controller apps
        【解决方案7】:

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

        【讨论】:

        • 我更喜欢这种方法,因为它会生成 RESTful 路由。使用rails g controller Foos create 会为get '/create' 生成一个根本不是RESTful 的路由。
        【解决方案8】:

        脚本/生成 rspec_scaffold 属性

        【讨论】:

        • 是的,我知道你已经接受了这个问题的答案,但我觉得这个解决方案可能也会帮助一些阅读这篇文章的人......上面的解决方案将创建一个模型等,如果你不需要,你可以删除
        【解决方案9】:

        您正在寻找脚手架。

        试试:

        script/generate scaffold Property
        

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

        正如 klew 在 cmets 中指出的那样,这也为您定义了 bodies 方法,而不仅仅是名称。用作 REST 控制器的起点非常有帮助。

        【讨论】:

        • @Barb,我认为脚手架对您来说会更好,因为它不仅声明了所有函数,而且还定义了它们。最好至少创建一次并以它们为例。
        【解决方案10】:

        除了通过脚手架之外,没有办法(我知道?有文档记录?)存根控制器。但你可以这样做:

        script/generate controller WhateverController new create edit update destroy show
        

        【讨论】:

        • 很好的答案,我认为您缺少一个动作,不是 7 个动作吗?
        猜你喜欢
        • 2019-11-16
        • 1970-01-01
        • 2022-01-20
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        相关资源
        最近更新 更多