[英]Rails: How to run `rails generate scaffold` when the model already exists?
我是 Rails 的新手,所以我当前的项目处于一种奇怪的状态。
我生成的第一件事是“电影”模型。 然后我开始更详细地定义它,添加一些方法等。
我现在意识到我应该用rails generate scaffold
生成它来连接路由、视图、控制器等。
我尝试生成脚手架,但收到错误消息,指出已存在同名的迁移文件。
现在为我的“电影”创建脚手架的最佳方式是什么? (使用导轨 3)
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 中生成一个控制器类并调用助手、模板引擎和测试框架生成器。
要创建您的资源,您将使用resource
生成器,而要创建迁移,您还可以看到migration
生成器(看,所有这些疯狂都有一个模式)。 这些提供了创建丢失文件以构建资源的选项。 或者,您可以使用--skip
选项运行rails generate scaffold
以跳过任何存在的文件:)
我建议花一些时间查看生成器内部的选项。 我觉得它们在书籍等中没有得到很好的记录,但它们非常方便。
Lee Jarvis
回答很好,这只是命令,例如; 我们已经有一个名为 User 的现有模型:
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.
核实
在Rails 5 中,您仍然可以运行
$rails generate scaffold movie --skip
创建所有丢失的脚手架文件或
rails generate scaffold_controller Movie
仅创建控制器和视图。
如需更好的解释,请查看Rails 脚手架
这个命令应该可以解决问题:
$ rails g scaffold movie --skip
可以使用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
我在Ubuntu 20.04 中处理Rails 6 API 应用程序时遇到了这个挑战。
我已经有模型,我需要为模型生成相应的控制器,并在控制器 params 中添加它们允许的属性。
这是我如何做到的:
我使用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
就这样。
我希望这有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.