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

How to run `rails generate scaffold` when the model already exists?

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

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

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

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

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


TL; DR:rails g scaffold_controller

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

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

Stubs out a scaffolded controller and its views. Pass the model name,
either CamelCased or under_scored, and a list of views as arguments.
The controller name is retrieved as a pluralized version of the model
name.

To create a controller within a module, specify the model name as a
path like 'parent_module/controller_name'.

This generates a controller class in app/controllers and invokes helper,
template engine and test framework generators.

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

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


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

1
rails g scaffold_controller User


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

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

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


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

1
$ rails g scaffold movie --skip

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

1
$rails generate scaffold movie --skip

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

1
rails generate scaffold_controller Movie

仅创建控制器和视图。

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


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

1
2
3
rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

此命令将生成以下文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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