📜  Ruby on Rails-脚手架

📅  最后修改于: 2020-10-20 05:30:41             🧑  作者: Mango


在开发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”。此默认行为可以被覆盖。

控制器使用ActiveRecord方法(例如find,find_all,new,save,update_attributes和destroy)在数据库表之间来回移动数据。注意,您不必编写任何SQL语句,rails会自动处理它。

这行代码将使数据库表栩栩如生。它将为您的数据提供一个简单的界面,以及-

  • 创建新条目
  • 编辑当前条目
  • 查看当前条目
  • 销毁当前条目

创建或编辑条目时,脚手架将为您完成所有艰苦的工作,例如表单生成和处理,甚至会提供巧妙的表单生成,支持以下类型的输入-

  • 简单的文字字符串
  • 文字区域(或大块文字)
  • 日期选择器
  • 日期时间选择器

您可以使用Rails Migrations创建和维护表。

rake db:migrate RAILS_ENV=development

现在,转到cookbook目录并使用以下命令运行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目录中可用。

脚手架有何不同?

如果您已经阅读了前面的章节,那么您一定已经知道我们已经创建了列出,显示,删除和创建数据等的方法,但是脚手架会自动完成该工作。