ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我现在意识到我应该用 rails generate scaffold 生成它来连接路由、视图、控制器等。

我试图生成脚手架,但我收到一条错误消息,提示已存在同名的迁移文件。

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

最好编写自己的控制器、视图和路由。您将了解有关这些概念的更多信息
同意@penne12。至少在开始时,直到您对这些概念感到满意,以便您知道为您生成的所有代码在做什么。
不直接相关,但如果你搞砸了,请使用 rails destroy 。我记得这在我开始时非常有用。
@BenAubin,尽管如此,Rails 的美妙之处在于不必不断编写样板文件。

L
Lee Jarvis

TL;DRrails 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

如果您想为您的模型生成控制器脚手架,请参阅 scaffold_controller。为清楚起见,以下是对此的描述:

存根一个脚手架控制器及其视图。传递模型名称(CamelCased 或 under_scored)和视图列表作为参数。控制器名称被检索为模型名称的复数形式。要在模块中创建控制器,请将模型名称指定为路径,例如“parent_module/controller_name”。这会在 app/controllers 中生成一个控制器类,并调用助手、模板引擎和测试框架生成器。

要创建资源,您可以使用 resource 生成器,而要创建迁移,您还可以查看 migration 生成器(请参阅,所有这些疯狂都有一个模式)。这些提供了创建缺失文件以构建资源的选项。或者,您可以使用 --skip 选项运行 rails generate scaffold 以跳过任何存在的文件 :)

我建议花一些时间查看生成器内部的选项。我不觉得它们在书籍等中记录得非常好,但它们非常方便。


哇,这是我对编程问题的最佳答案之一。谢谢!
我也有现有模型,执行 rails generate scaffold_controller MyModel 确实会生成视图层,但它不包括模型属性(表列),您必须手动添加这些属性。有人知道解决这个问题吗?我在 Rails 3.2.8 上。
@aaronbartell您要求Rails生成一个不关心模型属性的“scaffold_controller”。这并没有破坏,如果您还想生成模型,那么如果您有模型,但您想要支架控制器和新属性添加到您想要的模型,则需要 generate scaffold scaffold_generator,然后是 migration 和您的字段正在改变
@Lee - 没有 aaronbartell 询问为什么脚手架控制器不为传递给它的模型的现有属性生成相应的视图输入,这是一个有效的问题...... stackoverflow.com/q/17153864/165673
t
tokhi

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

rails g scaffold_controller User

谢谢你们,对于我们这些懒得看文字段落的人!
S
SierraOscar

对于使用现有数据库启动 Rails 应用程序的人,有一个名为 schema_to_scaffold 的很酷的 gem 可以生成脚手架脚本。它输出:

rails g 脚手架用户 fname:string lname:string bdate:date email:string encrypted_password:string

来自您的 schema.rb 我们重命名的 schema.rb. Check it


这是一个很棒的小宝石,它将对我有很大帮助!应该内置到 Rails 中!
N
Nesha Zoric

在 Rails 5 中,您仍然可以运行

$rails generate scaffold movie --skip

创建所有缺少的脚手架文件或

rails generate scaffold_controller Movie

仅创建控制器和视图。

如需更好的解释,请查看 rails scaffold


A
Andrew Hendrie

这个命令应该可以解决问题:

$ rails g scaffold movie --skip

D
Deepak Mahakale

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

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

此命令将生成以下文件:

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

P
Promise Preston

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

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

我是这样做的:

我使用 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

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

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

就这样。

我希望这有帮助


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅