- Ruby on Rails 教程
- Ruby on Rails - 主页
- Ruby on Rails - 简介
- Ruby on Rails - 安装
- Ruby on Rails - 框架
- Ruby on Rails - 目录结构
- Ruby on Rails - 示例
- Ruby on Rails - 数据库设置
- Ruby on Rails - 活动记录
- Ruby on Rails - 迁移
- Ruby on Rails - 控制器
- Ruby on Rails - 路线
- Ruby on Rails - 视图
- Ruby on Rails - 布局
- Ruby on Rails - 脚手架
- Ruby on Rails - AJAX
- Ruby on Rails - 文件上传
- Ruby on Rails - 发送电子邮件
- Ruby on Rails 资源
- Ruby on Rails - 参考指南
- Ruby on Rails - 快速指南
- Ruby on Rails - 资源
- Ruby on Rails - 讨论
- 红宝石教程
- 红宝石教程
Ruby on Rails - 脚手架
当您开发 Rails 应用程序时,尤其是那些主要为您提供数据库中数据的简单接口的应用程序时,使用脚手架方法通常很有用。
脚手架提供的不仅仅是廉价的演示刺激。以下是一些好处 -
您可以快速将代码提供给用户以获取反馈。
您受到更快成功的激励。
您可以通过查看生成的代码来了解 Rails 的工作原理。
您可以使用脚手架作为基础来快速启动您的开发。
脚手架示例
为了理解脚手架,我们创建一个名为Cookbook的数据库和一个名为Recipes的表。
创建空的 Rails Web 应用程序
打开命令窗口并导航到要创建此食谱Web 应用程序的位置。因此,运行以下命令来创建完整的目录结构。
tp> rails new cookbook
设置数据库
这是创建数据库的方法 -
mysql> create database cookbook; Query OK, 1 row affected (0.01 sec) mysql> grant all privileges on cookbook.* to 'root'@'localhost' identified by 'password'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
要指示Rails如何查找数据库,请编辑配置文件cookbook\config\database.yml并将数据库名称更改为cookbook。将密码留空。完成后,它应该如下所示 -
development: adapter: mysql database: cookbook username: root password: [password] host: localhost test: adapter: mysql database: cookbook username: root password: [password] host: localhost production: adapter: mysql database: cookbook username: root password: [password] host: localhost
Rails 允许您使用不同的数据库在开发模式、测试模式或生产模式下运行。该应用程序为每个应用程序使用相同的数据库。
生成的脚手架代码
通过脚手架操作,Rails 动态生成它需要的所有代码。通过将脚手架作为脚本运行,我们可以将所有代码写入磁盘,我们可以在其中对其进行研究,然后开始根据我们的要求对其进行定制。
现在,让我们再次开始使用脚手架帮助程序脚本手动生成脚手架代码 -
cookbook> rails generate scaffold recipe
它生成自动文件,如下所示 -
控制器
让我们看一下控制器背后的代码。该代码由脚手架生成器生成。如果你打开 app/controllers/recipes_controller.rb,那么你会发现如下内容 -
class RecipesController < ApplicationController before_action :set_recipe, only: [:show, :edit, :update, :destroy] # GET /recipes # GET /recipes.json def index @recipes = Recipe.all end # GET /recipes/1 # GET /recipes/1.json def show end # GET /recipes/new def new @recipe = Recipe.new end # GET /recipes/1/edit def edit end # POST /recipes # POST /recipes.json def create @recipe = Recipe.new(recipe_params) respond_to do |format| if @recipe.save format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' } format.json { render :show, status: :created, location: @recipe } else format.html { render :new } format.json { render json: @recipe.errors, status: :unprocessable_entity } end end end # PATCH/PUT /recipes/1 # PATCH/PUT /recipes/1.json def update respond_to do |format| if @recipe.update(recipe_params) format.html { redirect_to @recipe, notice: 'Recipe was successfully updated.' } format.json { render :show, status: :ok, location: @recipe } else format.html { render :edit } format.json { render json: @recipe.errors, status: :unprocessable_entity } end end end # DELETE /recipes/1 # DELETE /recipes/1.json def destroy @recipe.destroy respond_to do |format| format.html { redirect_to recipes_url, notice: 'Recipe was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_recipe @recipe = Recipe.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def recipe_params params.require(:recipe).permit(:tittle, :instructions) end end
当Rails应用程序的用户选择一个操作时,例如“Show” - 控制器将执行相应部分中的任何代码 - “def show” - 然后默认情况下将呈现一个同名的模板 - “show.html”。 erb”。可以覆盖此默认Behave。
控制器使用 ActiveRecord 方法(例如find、find_all、new、save、update_attributes 和 destroy)将数据移入和移出数据库表。请注意,您不必编写任何 SQL 语句,rails 会自动处理它。
这行代码将使数据库表变得生动起来。它将为您的数据提供一个简单的界面以及以下方式 -
- 创建新条目
- 编辑当前条目
- 查看当前条目
- 销毁当前条目
创建或编辑条目时,脚手架将为您完成所有艰苦的工作,例如表单生成和处理,甚至会提供巧妙的表单生成,支持以下类型的输入 -
- 简单的文本字符串
- 文本区域(或大块文本)
- 日期选择器
- 日期时间选择器
您可以使用 Rails Migrations 来创建和维护表。
rake db:migrate RAILS_ENV=development
现在,转到食谱目录并使用以下命令运行 Web 服务器 -
cookbook> rails server
现在,打开浏览器并导航到http://127.0.0.1:3000/recipe/new。这将为您提供一个在食谱表中创建新条目的屏幕。屏幕截图如下所示 -
一旦您按下“创建”按钮创建新菜谱,您的记录就会添加到菜谱表中,并显示以下结果 -
您可以看到编辑、显示和销毁记录的选项。所以,尝试一下这些选项。
您还可以使用 URL http://127.0.0.1:3000/recipe/list 列出食谱表中的所有可用食谱。
增强模型
Rails 免费为您提供了很多错误处理功能。要理解这一点,请向空配方模型添加一些验证规则 -
修改 app/models/recipe.rb 如下,然后测试您的应用程序 -
class Recipe < ActiveRecord::Base validates_length_of :title, :within => 1..20 validates_uniqueness_of :title, :message => "already exists" end
这些条目将进行自动检查。
validates_length_of - 该字段不是空白也不是太长。
validates_uniqueness_of - 捕获重复值。我们在这里给出了自定义消息,而不是默认的 Rails 错误消息。
创建脚手架的替代方法
创建一个如上所示的应用程序和如下所示的生成的支架代码
rails g scaffold Recipe tittle:string instructions:text
上面的代码使用带有标题和指令列的 sqlite3 生成带有数据库的自动文件,如下图所示。
我们需要使用以下语法来迁移数据库。
$ rake db:migrate RAILS_ENV=development
最后使用以下命令行运行应用程序 -
rails server
它将生成如上输出图像所示的结果。
观点
所有视图和相应的所有控制器方法都是由scaffold命令创建的,它们位于app/views/recipes目录中。
脚手架有何不同?
如果您已经阅读了前面的章节,那么您一定已经看到我们创建了列出、显示、删除和创建数据等的方法,但脚手架会自动完成这项工作。