Ruby on Rails-스캐 폴딩

Rails 애플리케이션, 특히 데이터베이스의 데이터에 대한 간단한 인터페이스를 주로 제공하는 애플리케이션을 개발하는 동안 scaffold 메서드를 사용하는 것이 유용 할 수 있습니다.

Scaffolding은 저렴한 데모 스릴 이상을 제공합니다. 다음은 몇 가지 이점입니다.

  • 피드백을 위해 사용자 앞에서 코드를 빠르게 얻을 수 있습니다.

  • 더 빠른 성공에 동기가 부여됩니다.

  • 생성 된 코드를 살펴보면 Rails의 작동 방식을 알 수 있습니다.

  • 스캐 폴딩을 기초로 사용하여 개발을 바로 시작할 수 있습니다.

비계 예

스캐 폴딩 을 이해하기 위해 다음과 같은 데이터베이스를 만들어 보겠습니다.cookbook 그리고라는 테이블 recipes.

빈 Rails 웹 애플리케이션 생성

명령 창을 열고 만들려는 위치로 이동합니다. cookbook웹 애플리케이션. 따라서 다음 명령을 실행하여 완전한 디렉토리 구조를 만듭니다.

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

그것은 아래와 같이 자동 파일을 생성합니다-

컨트롤러

컨트롤러 뒤에있는 코드를 살펴 보겠습니다. 이 코드는scaffold발전기. 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 ". 이 기본 동작은 덮어 쓸 수 있습니다.

컨트롤러는 find, find_all, new, save, update_attributes 및 destroy 와 같은 ActiveRecord 메소드를 사용 하여 데이터베이스 테이블 간에 데이터를 이동합니다. SQL 문을 작성할 필요는 없으며 Rails가 자동으로 처리합니다.

이 한 줄의 코드는 데이터베이스 테이블에 생명을 불어 넣을 것입니다. 데이터에 대한 간단한 인터페이스와 방법을 제공합니다.

  • 새 항목 만들기
  • 현재 항목 편집
  • 현재 항목보기
  • 현재 항목 삭제

항목을 만들거나 편집 할 때 scaffold는 양식 생성 및 처리와 같은 모든 노력을 수행하고 다음 유형의 입력을 지원하는 영리한 양식 생성도 제공합니다.

  • 간단한 텍스트 문자열
  • 텍스트 영역 (또는 큰 텍스트 블록)
  • 날짜 선택기
  • 날짜-시간 선택기

Rails Migrations를 사용하여 테이블을 생성하고 유지할 수 있습니다.

rake db:migrate RAILS_ENV=development

이제 요리 책 디렉토리로 이동하여 다음 명령을 사용하여 웹 서버를 실행하십시오.

cookbook> rails server

이제 브라우저를 열고 http://127.0.0.1:3000/recipe/new.그러면 레시피 테이블에 새 항목을 생성 할 수있는 화면이 제공됩니다. 스크린 샷은 아래와 같습니다.

일단 당신이 Create 버튼을 눌러 새 레시피를 생성하면 레코드가 레시피 테이블에 추가되고 다음 결과가 표시됩니다.

레코드를 편집, 표시 및 삭제하는 옵션을 볼 수 있습니다. 따라서 이러한 옵션을 사용해보십시오.

URL http://127.0.0.1:3000/recipe/list를 사용하여 recipes 테이블에서 사용 가능한 모든 레시피를 나열 할 수도 있습니다.

모델 향상

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 오류 메시지 대신 여기에 사용자 지정 메시지를 제공했습니다.

스캐 폴딩을 만드는 다른 방법

위와 같이 응용 프로그램을 만들고 The Generated Scaffold Code 아래 그림과 같이

rails g scaffold Recipe tittle:string instructions:text

위 코드는 아래 이미지와 같이 tittle 및 instruction 열과 함께 sqlite3와 함께 사용하여 데이터베이스로 자동 파일을 생성합니다.

아래 구문을 사용하여 데이터베이스를 마이그레이션해야합니다.

$ rake db:migrate RAILS_ENV=development

마지막으로 다음 명령 줄을 사용하여 응용 프로그램을 실행하십시오.

rails server

위의 출력 이미지와 같은 결과를 생성합니다.

관점들

모든 뷰와 해당하는 모든 컨트롤러 메서드는 scaffold 명령이며 app / views / recipes 디렉토리에서 사용할 수 있습니다.

비계는 어떻게 다른가요?

이전 장을 살펴 보셨다면 데이터를 나열, 표시, 삭제 및 생성하는 방법 등을 만들었을 것입니다.하지만 스캐 폴딩은 자동으로 작업을 수행합니다.