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

jaz*_*esh 26 model ruby-on-rails scaffold

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

ace*_*reg 50

生成模型时,您将获得模型以及一些相关组件.我最喜欢解释这类主题的方法之一是实际尝试或鼓励其他人尝试,所以如果我要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
Run Code Online (Sandbox Code Playgroud)

第一行调用Active Record,它基本上将您的模型绑定到您的数据库.下一行创建所谓的迁移文件.迁移文件包含更改数据库的说明.第一个迁移文件创建名为"foos"的数据库表,它还将为"name"和"description"创建列.

下一行是模型本身.该模型基本上是一个继承自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
Run Code Online (Sandbox Code Playgroud)

为了回答你的问题,脚手架的优势在于它快速,简单,并且一切都是为你预先配置的.然而,独立于脚手架生成模型(然后在需要的地方生成控制器/视图并自己编写routes.rb文件)的优点是,您可以更好地控制应用程序及其外观和功能,避免不必要的代码,您可以采用行为驱动开发或测试驱动开发,以及其他人可能想要添加的其他东西.

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

  • 不知道撤消!谢谢你让我知道!+1 (2认同)

Mar*_*n M 5

生成脚手架包括生成模型但也生成

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

对于新的 Rails 用户来说,脚手架是一个好的开始。