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 디렉토리에서 사용할 수 있습니다.
비계는 어떻게 다른가요?
이전 장을 살펴 보셨다면 데이터를 나열, 표시, 삭제 및 생성하는 방법 등을 만들었을 것입니다.하지만 스캐 폴딩은 자동으로 작업을 수행합니다.