Rails:模型已存在时如何运行“rails生成脚手架”?

问题描述 投票:0回答:8

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

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

我现在意识到我应该用

rails generate scaffold
生成它来连接路由、视图、控制器等。

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

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

ruby-on-rails ruby-on-rails-3
8个回答
660
投票

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

如果您想为您的模型生成控制器支架,请参阅

scaffold_controller
。为了清楚起见,以下是对此的描述:

删除脚手架控制器及其视图。传递型号名称, CamelCased 或 under_scored 以及作为参数的视图列表。 控制器名称作为模型的复数版本检索 名字。

要在模块内创建控制器,请将模型名称指定为 路径如“parent_module/controller_name”。

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

要创建资源,您可以使用

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

我建议花一些时间查看发电机内部的选项。我觉得它们在书籍等中没有得到很好的记录,但它们非常方便。


76
投票

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

rails g scaffold_controller User

33
投票

对于那些使用现有数据库启动 Rails 应用程序的人,有一个名为

schema_to_scaffold
的很酷的 gem 可以生成脚手架脚本。 它输出:

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

来自您的

schema.rb
我们您的重命名
schema.rb.
检查一下


17
投票

Rails 5 中,你仍然可以运行

$rails generate scaffold movie --skip

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

rails generate scaffold_controller Movie

仅创建控制器和视图。

为了更好的解释请查看railsscaffold


12
投票

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

$ rails g scaffold movie --skip

11
投票

您可以使用

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

5
投票

我在 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

仅此而已。

我希望这有帮助


0
投票

在 Rails 7/8 中,这是这样做的方法:

rails g scaffold Movie field1:references field2:string field3:integer --skip-collision-check --skip

确保您输入的模型属性与现有模型完全相同。 --skip-collision-check 将允许您运行生成器。 --skip 将运行脚手架而不触及现有文件,这将是模型和迁移

© www.soinside.com 2019 - 2024. All rights reserved.