Rails中脚手架和模型之间的区别

生成支架和在Rails中生成模型有什么区别? 做任何一个的优点/缺点是什么?

生成模型时,您将获得模型以及一些相关组件。 我最喜欢解释这类主题的方法之一是实际尝试或鼓励其他人尝试它,所以如果我要输入命令rails generate model Foo name:string description:text Rails项目中的rails generate model Foo name:string description:text ,我会得到:

 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”的数据库表,它还将为“name”和“description”创建列。

下一行是模型本身。 该模型基本上是一个inheritance自Active Record的Ruby类。 这意味着现在可以在模型中调用可在Active Record中调用的任何方法。 最后三行基本上为您的模型创建相关的测试文件。 如果您使用RSpec,则会创建spec文件。

如果您的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文件)的优点是,您可以更好地控制应用程序及其外观和function,避免不必要的代码,您可以采用行为驱动开发或测试驱动开发,以及其他人可能想要添加的其他东西。

我的最后一点建议是:Rails是非常用户友好的,所以尝试自己尝试一下。 你可以使用相应的destroy命令撤消任何generate命令,所以例如rails destroy scaffold Foo会删除rails generate Scaffold Foo name:string description:string所有文件rails generate Scaffold Foo name:string description:string ,所以你不必担心不可挽回地搞乱一个通过实验项目。

生成支架包括生成模型但也生成

  • RESTful路线
  • 一个控制器,包含用于RESTful处理模型的所有操作
  • 控制器需要的视图
  • 测试存根

Scaffolding是新Rails用户的良好开端。

新用户很可能会被脚手架弄糊涂,因为他们无法理解所有组件如何协同工作。 脚手架可能最适合有经验的用户,他们想要一个他们通常会重复工作的捷径。

 $rails generate scaffold  

您可以使用完整的CRUD(创建,读取,更新,删除)Web界面自动生成可立即使用的控制器,模型和视图。 它比生成模型更容易,更快捷,但它生成的代码不太适合您的应用程序。

对于简单的示例,快速模型或测试, 脚手架非常适合使用。

如果您在已经生成模型后改变主意并决定使用scaffold,则可以随时运行

 $rails generate scaffold  

它将创建所有丢失的文件。 或者,如果您对使用脚手架感到满意,可以按以下方式将其删除:

生成脚手架:

 $rails generate scaffold Story 

如果迁移了文件,请执行回滚:

 $rake db:rollback 

摧毁或撤消脚手架 :$ rails摧毁脚手架故事