$ bin/rails generate scaffold Post title content:text
invoke active_record
create db/migrate/20140501054730_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/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/controllers/posts_controller_test.rb
invoke helper
create app/helpers/posts_helper.rb
invoke test_unit
create test/helpers/posts_helper_test.rb
invoke jbuilder
create app/views/posts/index.json.jbuilder
create app/views/posts/show.json.jbuilder
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
Post 모델은 title(글제목)과 content(글내용) 두개의 속성을 가지고 있다.
우선 명령라인에 사용된 scaffold 는 건물이나 다리 등을 건설하거나 유지 보수할 때 작업자나 자재 등을 지지하는데 사용되는 임시 구조물을 뜻하는 단어이다. 그러므로 scaffold를 사용하여 생성된 모듈은 모델과 마이그레이션에서 컨트롤러와 뷰까지 test suite를 포함하여 전체 리소스들을 생성한다.
1. 20140501054730_create_posts.rb
파일의 내용은 다음과 같다.class CreatePosts < ActiveRecord::Migration def change create_table :posts do |t| t.string :title t.text :content t.timestamps end end end
이 파일은 rake 명령의 여러가지 task 중 db:migrate 작업 실행시 사용되며 실행결과로 데이터베이스 테이블을 생성한다. 이 때 테이블의 이름은 레일즈의 규칙에 따라 복수형(posts)으로 지정된다.
$ bin/rake db:migrate
== 20150130063424 CreatePosts: migrating ======================================
-- create_table(:posts)
-> 0.0010s
== 20150130063424 CreatePosts: migrated (0.0011s) =============================
2. 마이그레이션 작업
마이그레이션 상태 확인
마이그레이션 작업 수행결과의 히스토리를 확인할 수 있다.
방금 수행했던 마이그레이션을 취소하였다.
$bin/rake db:migrate:redo 명령으로 취소했던 마이그레이션을 다시 실행할 수 있다.
아래와 같이 다시 실행된 상태('up')를 확인할 수 있다.
이것은 마이그레이션 작업의 고유 번호다. 이 값은 마이그레이션 파일이 생성될 때 자동으로 파일명 앞에 붙는 타임스탬프로 고유한 값을 가진다. 예를 들어, 위에서 사용된 20140501054730_create_posts.rb 파일의 파일명 시작부분에 있는 숫자가 이에 해당한다.
이것은 마이그레이션 파일명의 타임스탬프를 제외한 부분에서 발췌한 것이다.
데이터베이스 마이그레이션 작업은 version 이라는 하나의 속성만을 가지는 schema_migrations라는 테이블에 마이그레이션 ID 값이 저장된다. 위에서 언급했던 마이그레이션 상태(Status)는 해당 마이그레이션 ID 값이 schema_migrations 테이블에 존재할 때 up 상태로 표시되고 없을 경우에 down 상태로 표시된다. 이를 확인하기 위해서 레일스 DB 콘솔로 접근해서 해당 테이블의 값을 조회해 보자.

위에서 Post 모델을 scaffold 제너레이터를 이용하여 생성할 때 콘솔 출력내용 중 아래와 같은 부분을 발견할 수 있다.
따라서, 위와 같이 브라우저에서 http://localhost:3000/posts 와 같이 요청하게 되면 디폴트로 HTTP GET 메소드에 매칭되는 URI 패턴을 찾아보게 된다. 결과적으로 posts 컨트롤러를 호출하여 index 액션을 실행하게 되고 최종적으로 app/views/posts/ 디렉토리 상의 idnex.html.erb 뷰 템플릿을 렌더링하여 응답으로 보내게 된다.
브라우저 상에서 데이터 추가, 삭제 , 변경에서 문제없이 잘 수행되는 것을 확인하자.
지금까지 scaffold 제너레이터를 이용하여 특별한 추가 코딩없이 최소한의 기능을 가진 게시물 작성 모듈을 작성할 수 있게 되었는데, 처음 레일스를 접하는 개발자들에게는 놀라운 일이다. 레일스는 이와 같이 기본적인 기능을 구현하기 위해서 개발자들이 추가해야 하는 코드를 대신해서 작성해 준다.
초보자를 위한 레일스 가이드북(a.k.a, 초레가) 에서 퍼왔습니다.
$ in/rake db:migrate:status
database: /Users/rorlakr/rcafe/db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20150130063424 Create posts
status는 마이그레이션의 상태를 나타낸다. up은 마이그레이션이 실행된 상태이고, down은 아직 마이그레이션이 수행되지 않은 상태를 의미한다.마이그레이션 취소
$ bin/rake db:rollback
== 20150130063424 CreatePosts: reverting ======================================
-- drop_table(:posts)
-> 0.0006s
== 20150130063424 CreatePosts: reverted (0.0045s) =============================
방금 수행했던 마이그레이션을 취소하였다.
$ bin/rake db:migrate:status
database: /Users/rorlakr/rcafe/db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
down 20150130063424 Create posts
$ bin/rake db:migrate:redo
== 20150130063424 CreatePosts: migrating ======================================
-- create_table(:posts)
-> 0.0014s
== 20150130063424 CreatePosts: migrated (0.0015s) =============================
$ bin/rake db:migrate:status
database: /Users/rorlakr/rcafe/db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20150130063424 Create posts
마이그레이션 ID (Migration ID)
이것은 마이그레이션 작업의 고유 번호다. 이 값은 마이그레이션 파일이 생성될 때 자동으로 파일명 앞에 붙는 타임스탬프로 고유한 값을 가진다. 예를 들어, 위에서 사용된 20140501054730_create_posts.rb 파일의 파일명 시작부분에 있는 숫자가 이에 해당한다.
마이그레이션 이름(Migration Name)
이것은 마이그레이션 파일명의 타임스탬프를 제외한 부분에서 발췌한 것이다.
schema_migrations 테이블
데이터베이스 마이그레이션 작업은 version 이라는 하나의 속성만을 가지는 schema_migrations라는 테이블에 마이그레이션 ID 값이 저장된다. 위에서 언급했던 마이그레이션 상태(Status)는 해당 마이그레이션 ID 값이 schema_migrations 테이블에 존재할 때 up 상태로 표시되고 없을 경우에 down 상태로 표시된다. 이를 확인하기 위해서 레일스 DB 콘솔로 접근해서 해당 테이블의 값을 조회해 보자.
$ bin/rails db
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> select version from schema_migrations;
20150130063424
3. 리소스 라우팅
이제 브라우저에서 http://서버IP:서버포트/posts 로 접근하면 아래와 같은 화면을 볼 수 있다.
위에서 Post 모델을 scaffold 제너레이터를 이용하여 생성할 때 콘솔 출력내용 중 아래와 같은 부분을 발견할 수 있다.
$ bin/rails generate scaffold Post title content:text
...
invoke resource_route
route resources :posts
...
즉, resource_route 모듈을 호출하여 config/routes.rb 파일에 resources :posts 라일을 추가한다. 이와 같이 라우팅을 선언하는 바법을 리소스 라우팅 이라고 한다. 이로서 아래와 같은 라우팅을 사용할 수 있게 된다.$ bin/rake routes
Prefix Verb URI Pattern Controller#Action
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
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
root GET / welcome#index
브라우저 상에서 데이터 추가, 삭제 , 변경에서 문제없이 잘 수행되는 것을 확인하자.
지금까지 scaffold 제너레이터를 이용하여 특별한 추가 코딩없이 최소한의 기능을 가진 게시물 작성 모듈을 작성할 수 있게 되었는데, 처음 레일스를 접하는 개발자들에게는 놀라운 일이다. 레일스는 이와 같이 기본적인 기능을 구현하기 위해서 개발자들이 추가해야 하는 코드를 대신해서 작성해 준다.
초보자를 위한 레일스 가이드북(a.k.a, 초레가) 에서 퍼왔습니다.
댓글 없음:
댓글 쓰기