当模型已经存在时,如何运行`rails generate scaffold`?

Lan*_*Lan 325 ruby-on-rails ruby-on-rails-3

我是Rails的新手,所以我目前的项目处于一种奇怪的状态.

我生成的第一件事是"电影"模型.然后我开始更详细地定义它,添加了一些方法等.

我现在意识到我应该生成它rails generate scaffold来连接诸如路由,视图,控制器等的东西.

我试图生成脚手架,但我收到一个错误,说已存在同名的迁移文件.

现在为我的"电影"创建脚手架的最佳方式是什么?(使用导轨3)

Lee*_*vis 584

TL; DR:rails g scaffold_controller <name>

即使您已经有模型,仍然可以使用该rails generate选项生成必要的控制器和迁移文件.如果您运行,rails generate -h您可以看到所有可用的选项.

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets
Run Code Online (Sandbox Code Playgroud)

如果您想为模型生成控制器支架,请参阅scaffold_controller.为了清楚起见,这里的描述如下:

找到一个脚手架控制器及其视图.传递模型名称,CamelCased或under_scored,以及视图列表作为参数.控制器名称将作为模型名称的复数形式进行检索.

要在模块中创建控制器,请将模型名称指定为"parent_module/controller_name"之类的路径.

这会在app/controllers中生成一个控制器类,并调用帮助器,模板引擎和测试框架生成器.

要创建资源,你可以使用resource生成器,并创建一个迁移,你也可以看到migration生成器(参见,所有这些疯狂的模式).这些提供了创建缺失文件以构建资源的选项.或者你可以只运行rails generate scaffold--skip选择跳过它存在的任何文件:)

我建议花些时间查看生成器内部的选项.他们是我认为在书籍等方面记录得非常好的东西,但它们非常方便.

  • 哇,我得到编程问题的最佳答案之一.谢谢! (12认同)
  • 我也有现有的模型,做`rails generate scaffold_controller MyModel`会生成视图层,但它不包含模型属性(表列),你必须手动添加它们.有谁知道修复此问题?我在Rails 3.2.8上. (12认同)
  • @Lee - 没有aaronbartell问为什么scaffold_controller不会为传递给它的模型的现有属性生成相应的视图输入,这是一个有效的问题... http://stackoverflow.com/q/一十六万五千六百七十三分之一千七百十五万三千八百六十四 (9认同)

tok*_*khi 65

很好的答案Lee Jarvis,这只是命令,例如; 我们已经有一个名为User的现有模型:

rails g scaffold_controller User
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,对于我们这些懒得阅读文字的段落! (9认同)

fre*_*sim 29

对于那些使用现有数据库启动rails应用程序的人来说,有一个很酷的gem schema_to_scaffold来生成一个脚手架脚本.它输出:

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

从你的schema.rb我们你重命名schema.rb. 检查它

  • 这是一个伟大的小宝石,它将帮助我很多!应该内置到Rails! (2认同)

And*_*rie 12

这个命令可以做到这一点:

$ rails g scaffold movie --skip
Run Code Online (Sandbox Code Playgroud)


Dee*_*ale 8

您可以使用scaffold_controller并记住传递attributes模型,否则将生成没有属性的脚手架.

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string
Run Code Online (Sandbox Code Playgroud)

此命令将生成以下文件:

create  app/controllers/users_controller.rb
invoke  haml
create    app/views/users
create    app/views/users/index.html.haml
create    app/views/users/edit.html.haml
create    app/views/users/show.html.haml
create    app/views/users/new.html.haml
create    app/views/users/_form.html.haml
invoke  test_unit
create    test/controllers/users_controller_test.rb
invoke  helper
create    app/helpers/users_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/users/index.json.jbuilder
create    app/views/users/show.json.jbuilder
Run Code Online (Sandbox Code Playgroud)


Nes*_*ric 8

Rails 5中,您仍然可以运行

$rails generate scaffold movie --skip
Run Code Online (Sandbox Code Playgroud)

创建所有丢失的脚手架文件或

rails generate scaffold_controller Movie
Run Code Online (Sandbox Code Playgroud)

仅创建控制器和视图.

有关更好的解释,请查看rails scaffold


Pro*_*ton 5

我在Ubuntu 20.04中开发Rails 6 API 应用程序时遇到了这个挑战。

我已经有了现有的模型,我需要为模型生成相应的控制器,并在控制器 params中添加它们允许的属性

我是这样做的

我用它rails generate scaffold_controller来完成它。

我只是运行了以下命令:

rails generate scaffold_controller School name:string logo:json motto:text address:text

rails generate scaffold_controller Program name:string logo:json school:references
Run Code Online (Sandbox Code Playgroud)

这为模型生成了相应的控制器,并在控制器 params中添加了它们允许的属性,包括外键属性。

create  app/controllers/schools_controller.rb
invoke  test_unit
create    test/controllers/schools_controller_test.rb

create  app/controllers/programs_controller.rb
invoke  test_unit
create    test/controllers/programs_controller_test.rb
Run Code Online (Sandbox Code Playgroud)

就这样。

我希望这有帮助