脚手架 Rails4 空控制器

Posted

技术标签:

【中文标题】脚手架 Rails4 空控制器【英文标题】:Scaffolding Rails4 Empty Controller 【发布时间】:2014-06-30 17:13:14 【问题描述】:

我在我的 testapp 项目中使用了多个脚手架。

我已经像这样创建了第一个脚手架:

rails g Post title desc:text

它成功并创建了所有相关文件和控制器。

但是当我制作另一个脚手架时:

testapp$ rails g scaffold product name:string information:text 'price:decimal7,2' stock:integer available:boolean
      invoke  active_record
      create    db/migrate/20140513062549_create_products.rb
      create    app/models/product.rb
      invoke    test_unit
      create      test/models/product_test.rb
      create      test/fixtures/products.yml
      invoke  resource_route
       route    resources :products
      invoke  inherited_resources_controller
      create    app/controllers/products_controller.rb
      invoke    erb
      create      app/views/products
      create      app/views/products/index.html.erb
      create      app/views/products/edit.html.erb
      create      app/views/products/show.html.erb
      create      app/views/products/new.html.erb
      create      app/views/products/_form.html.erb
      invoke    test_unit
      create      test/controllers/products_controller_test.rb
      invoke    helper
      create      app/helpers/products_helper.rb
      invoke      test_unit
      create        test/helpers/products_helper_test.rb
      invoke    jbuilder
      create      app/views/products/index.json.jbuilder
      create      app/views/products/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/products.js.coffee
      invoke    scss
      create      app/assets/stylesheets/products.css.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.css.scss

但是当我打开控制器app/controllers/products_controller.rb它是空的,为什么会这样??

另外1件事我也在使用activeadmin,我知道这与它无关。

【问题讨论】:

看起来很奇怪。我使用Rails 3。对我来说,它正在创建一个包含所有CRUD 方法和code 的非空控制器。 我刚刚复制了你的完整命令并执行了。它对我有用。 我无法按照您的重现步骤在标准 Rails 安装上重现您的问题。你怎么能确定 ActiveAdmin 不会干扰?据我所知,兼容 Rails 4 的 ActiveAdmin 尚未发布,因此您正在运行测试版/预发布版。谁知道其中有什么不正常的。 @pavan 我尝试在新项目中做这个脚手架,效果很好,可能与它有关。 【参考方案1】:

我无法在基本的 Rails 安装上重现这个:

$ rails new empty && cd empty
$ rails g scaffold Post title desc:text
$ rails g scaffold product name:string information:text 'price:decimal7,2' stock:integer available:boolean

在此之后,app/controllers/products_controller.rb 拥有我希望它拥有的所有行:

$ wc -l app/controllers/products_controller.rb
      74 app/controllers/products_controller.rb

也就是说,如果我将 ActiveAdmin 添加到 Gemfile:

$ echo 'gem "activeadmin", github: "gregbell/active_admin"' >> Gemfile && bundle

并生成脚手架:

$ rails g scaffold product name:string information:text 'price:decimal7,2' stock:integer available:boolean

我的app/controllers/products_controller.rb 包含的代码要少得多。不是空的,而是差不多:

class ProductsController < InheritedResources::Base
end

如果这也是您所看到的,那么您的问题来自 ActiveAdmin 使用inherited_resources 来完成一些繁重的工作。你最终得到了一个 InheritedResource 控制器。

不过,控制器应该可以正常工作。

【讨论】:

我尝试在新项目中做这个脚手架,效果很好,可能与它有关。 rails g scaffold product name:string information:text 'price:decimal7,2' stock:integer available:boolean -c=scaffold_controller 这很好用,虽然我不知道它是如何工作的。

以上是关于脚手架 Rails4 空控制器的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 中的脚手架允许选择 Parent_id,但烘焙控制器显示一个空的选择框

如何避免 Rails 脚手架将模型放入命名空间

在 rails4 中运行创建 n 次

停止脚手架生成 scafolds.css.scss

使用 bootstrap for rails 4 脚手架形式

使用带有 Rails 脚手架的测试驱动开发 (TDD)