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

时间:2010-12-02 09:21:42

标签: ruby-on-rails ruby-on-rails-3

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

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

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

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

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

7 个答案:

答案 0 :(得分:569)

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,以及作为参数的视图列表。       控制器名称将作为模型的复数版本进行检索       名。

     

要在模块中创建控制器,请将型号名称指定为a       路径如'parent_module / controller_name'。

     

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

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

我建议花一些时间查看生成器内部的选项。

,这些是我认为在书籍等方面记录得非常好的东西。但是它们非常方便。

答案 1 :(得分:62)

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

rails g scaffold_controller User

答案 2 :(得分:29)

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

  

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

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

答案 3 :(得分:12)

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

$ rails g scaffold movie --skip

答案 4 :(得分:7)

您可以使用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 :(得分:6)

Rails 5 中,您仍然可以运行

$rails generate scaffold movie --skip

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

rails generate scaffold_controller Movie

仅创建控制器和视图。

要获得更好的解释,请查看rails scaffold

答案 6 :(得分:0)

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

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

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

仅此而已。

我希望这会有所帮助