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


331

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

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

我现在意识到我应该已经生成了它,rails generate scaffold以连接诸如路由,视图,控制器等之类的东西。

我试图生成脚手架,但出现一个错误,说已经存在一个具有相同名称的迁移文件。

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


1
最好编写自己的控制器以及视图和路由。您将了解有关概念的更多信息
Ben Aubin 2015年

1
同意@ penne12。至少在开始之前,直到您熟悉这些概念,以使您知道所有代码在为您生成的内容。
mydoghasworms

没有直接关系,但是如果您搞砸了,请使用rails destroy <etc>。我记得当我开始时这真的很有用。
赫尔辛格2015年

1
@BenAubin是真实的,Rails的优点在于不必不断编写样板。
Romuloux

Answers:


596

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生成器(请参见,所有这种疯狂的模式都有)。这些提供了用于创建缺少的文件以构建资源的选项。或者你可以只运行rails generate scaffold--skip选择跳过它存在的任何文件:)

我建议花一些时间查看生成器内部的选项。我觉得这些东西在书本上并没有得到很好的记录,但是它们非常方便。


12
哇,我对编程问题的最佳回答之一。谢谢!
Lan 2010年

12
我也有现有的模型,并且rails generate scaffold_controller MyModel确实会生成视图层,但是它不包括模型属性(表列),因此您必须手动添加这些属性。有人知道解决办法吗?我在Rails 3.2.8上。
aaronbartell

@aaronbartell您要Rails生成一个“ scaffold_controller”,它并不关心模型属性。这不是坏了,如果你想生成的模型太,那么你想generate scaffold,如果你有一个模型,但你想有一个支架控制器,并添加到您想要的模型新的属性scaffold_generator,然后migration用领域你改变
李贾维斯

9
@Lee-没有aaronbartell在问scaffold_controller为什么不为传递给它的模型的现有属性生成相应的视图输入,这是一个有效的问题... stackoverflow.com/q/17153864/165673
Yarin 2013年

67

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

rails g scaffold_controller User

10
谢谢您,因为我们这些人懒得阅读文本段落!
克里斯·西里菲斯

30

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

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

从您schema.rb的重命名中schema.rb. 检查


2
这是一颗很棒的利特尔宝石,对我有很大帮助!应该内置在Rails中!
彼得·安德森

13

Rails 5中,您仍然可以运行

$rails generate scaffold movie --skip

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

rails generate scaffold_controller Movie

创建控制器并仅查看。

有关更好的说明,请查看滑轨脚手架



10

您可以利用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.