About controller and scaffolding in Ruby on Rails
我现在正在编写 Rails 指南,对控制器和脚手架感到困惑。在指南中,我看到了两个命令:
1 2 | $ rails generate controller home index $ rails generate scaffold Post name:string title:string content:text |
我知道第一行意味着它创建了一个带有动作索引的家庭控制器。但是,我不太明白这里的实际含义是什么。它只是意味着它将呈现一个地址为"home/index"的页面吗?
对于第二行,我的理解是它创建了一个名为 Post 的应用程序,其中包含三个参数名称、标题和内容。我不知道它是否正确,我想知道脚手架的真正含义。该指南的解释对我来说有点模棱两可。
谢谢。
所以,首先,你应该运行它们。他们将列出他们创建的文件,您可以查看它们。
第一个创建了一个名为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | create app/controllers/home_controller.rb route get"home/index" invoke erb create app/views/home create app/views/home/index.html.erb invoke test_unit create test/functional/home_controller_test.rb invoke helper create app/helpers/home_helper.rb invoke test_unit create test/unit/helpers/home_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/home.js.coffee invoke scss create app/assets/stylesheets/home.css.scss |
特别有用的是控制器:
1 2 3 4 | class HomeController < ApplicationController def index end end |
你没有给 Rails 任何关于你想让那个动作做什么的信息(你刚才说,"创建一个名为 \\'home\\' 的控制器和一些名为 \\'index\\'"的动作),所以填写该方法由您决定。您可以通过调用
查看 URL 信息
1 | home_index GET /home/index(.:format) home#index |
换句话说,当您向
第二个生成器做的更多。它创建了一个资源,这意味着您存储在数据库中的模型以及具有简单 CRUD 操作和虚拟视图来操作该模型的控制器。因此,除了上面的控制器/视图之外,它还创建了一个升级脚本以在数据库中创建正确的表和一个用作模型的 Ruby 类。请特别查看此处的前两个"create"项,然后将它们加载到您的编辑器中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | invoke active_record create db/migrate/20130111151206_create_posts.rb create app/models/post.rb invoke test_unit create test/unit/post_test.rb create test/fixtures/posts.yml invoke resource_route route resources :posts invoke scaffold_controller create app/controllers/posts_controller.rb invoke erb create app/views/posts create app/views/posts/index.html.erb create app/views/posts/edit.html.erb create app/views/posts/show.html.erb create app/views/posts/new.html.erb create app/views/posts/_form.html.erb invoke test_unit create test/functional/posts_controller_test.rb invoke helper create app/helpers/posts_helper.rb invoke test_unit create test/unit/helpers/posts_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/posts.js.coffee invoke scss create app/assets/stylesheets/posts.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss |
您可以再次通过运行
查看所有实际可以执行的操作
1 2 3 4 5 6 7 | posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy |
最后,查看
第 1 行创建一个控制器,其中包含 2 个操作(及其视图)。但是没有型号。
第 2 行创建一个资源。资源具有在其控制器中预定义的默认 REST 操作(创建、删除、更新等)。相应的视图也会为您创建。该资源还使用给定的参数(名称:datatype_in_sql)创建一个新模型(包括为其迁移)。