当您生成模型时,您会获得一个模型以及一些相关组件。我最喜欢的解释此类主题的方法之一是实际尝试或鼓励其他人尝试,所以如果我输入命令rails generate model Foo name:string description:text
在 Rails 项目中,我会得到:
invoke active_record
create db/migrate/20130719012107_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
第一行调用Active Record
,它基本上将您的模型与数据库联系起来。下一行创建所谓的迁移文件。迁移文件包含更改数据库的说明。第一个迁移文件创建名为“foos”的数据库表,并且还将创建“名称”和“描述”列。
下一行制作模型本身。该模型基本上是一个继承自 Active Record 的 Ruby 类。这意味着可以在 Active Record 中调用的任何方法现在都可以在您的模型中调用。最后三行基本上为您的模型创建相关的测试文件。如果您使用 RSpec,则会创建规范文件。
如果您的 Rails 应用程序仅包含模型,那么您将不会有任何类型的在页面上显示信息的视图,也不会具有控制信息流的指令。您的选择是还生成控制器(进而生成您的视图)或生成支架,它生成您的模型、视图、控制器并写入您的routes.rb 文件。如果我跑了rails generate scaffold foo
我会得到:
invoke active_record
create db/migrate/20130719013307_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
invoke resource_route
route resources :foos
invoke scaffold_controller
create app/controllers/foos_controller.rb
invoke erb
create app/views/foos
create app/views/foos/index.html.erb
create app/views/foos/edit.html.erb
create app/views/foos/show.html.erb
create app/views/foos/new.html.erb
create app/views/foos/_form.html.erb
invoke test_unit
create test/functional/foos_controller_test.rb
invoke helper
create app/helpers/foos_helper.rb
invoke test_unit
create test/unit/helpers/foos_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/foos.js.coffee
invoke scss
create app/assets/stylesheets/foos.css.scss
invoke scss
identical app/assets/stylesheets/scaffolds.css.scss
回答你的问题,脚手架的优点是它快速、简单,并且一切都是为你预先配置的。然而,独立于脚手架生成模型(然后在需要时生成控制器/视图并自己编写routes.rb文件)的优点是,您可以更好地控制应用程序及其外观和功能,从而避免不必要的代码,您可以采用行为驱动开发或测试驱动开发,以及其他人可能想要添加的其他内容。
我的最后一点建议是:Rails 非常用户友好,所以请尝试自己尝试。您可以撤消任何generate
命令与相应的destroy
命令,例如rails destroy scaffold Foo
将删除由rails generate Scaffold Foo name:string description:string
,因此您不必担心实验会导致项目不可挽回地混乱。