recipes(요리법) 테이블 만들기
요리법을 담고 있는 데이터 테이블을 만들자.
MySQL-Front의 왼쪽 창에 마우스 오른쪽 버튼을 클릭한다. 팝업 메뉴의 New>Table… 메뉴를 선택한다. (그림 21, 역주 : MySQL-Front 버전에 따라서 다른 그림일 수 있음.)
그림 21. 신규 테이블 생성
테이블 이름을 recipes으로 입력(그림 22)
그림 22. 신규 테이블 추가 다이얼로그
주의 사항 : MySQL-Front는 Id라는 이름으로 프라이머리 키를 생성한다. 그러나, Rails에서는 id로 인식하기 때문에 프라이머리 키 값을 변경해야 한다. 왼쪽 창에서 recipes 테이블을 선택한 후 오른쪽 창에서 Id 프라이머리 키 값을 id로 바꿔 준다.(그림 23 참조)
역자 주 : 그러나 번역 시 설치한 MySQL-Front 버전(3.2 빌드 9.14)에서는 프라이머리 키 이름을 id로 생성하기 때문에 위 문단은 생략해도 무방하다.
그림 23. 프라이머리 키 이름 바꾸기
Recipes 테이블에 필드 추가하기
여러가지 필드를 추가해야 하나, 여기서는 요리법의 이름과 방법(title, instructions) 필드만 추가하자. 뒤에서 다른 나머지 필드를 추가할 것이다.
recipes 테이블을 선택한 상태에서, 오른쪽 창에서 마우스 오른쪽 버튼을 클릭한 후 메뉴 New>Field…를 선택하자.(그림 24)
그림 24. 새 필드 추가하기
새로 추가하는 필드는 요리법 title(제목)으로 varchar(255)에 null을 허용하지 않는다.(그림 25 참조)
그림 25. title 필드 추가하기
동일한 방법으로 text 타입의 instructions(요리 방법) 필드를 생성한다.(그림 26)
그림 26. instructions 필드 추가하기
두 개의 필드를 추가된 recipes 테이블은 그림 27과 같다.
그림 27. recipe 테이블
즐거움이 시작되다~
다소 지루한 데이터베이스 작업은 이제 끝났다. 이제 요리책 application을 가동시켜서 요리법을 작성할 시간이다.
모델 만들기
우선 Recipe(요리법) 모델을 만들어야 한다. 이 Recipe모델은 recipes 테이블의 데이터를 가지고 올 것이다. 그림 28에서 Recipe 모델이 위치한 곳을 확인할 수 있다.
역자 주 : models 클래스는 application 폴더(여기서는 c:/rails/cookbook)의 app/models 폴더에 위치한다.
그림 28. Recipe 모델 클래스
새로운 명령창(Command window)를 열고 c:/rails/cookbook에서 아래의 명령어를 입력한다.
ruby script\generate model Recipe
위의 명령어는 recipe.rb 파일을 생성하는데, 이 파일은 Recipe 클래스를 정의하는 뼈대를 담고 있다. 이 파일에 마우스 오른쪽 버튼을 클릭한 후 edit 메뉴를 선택하면 그림 29의 클래스 정의를 확인할 수 있다.
그림 29. recipe.rb 파일의 내용
뭔가 이상한걸 눈치 채지 못했는가? 여기서 만든 테이블 이름은 recipes 였다. 그런데 모델로 만들 클래스의 이름은 Recipe이였다. 즉 테이블은 요리법들(역자 주 : recipes이기 때문에 복수형이다. 구지 원어 가깝게 표현하면)이고 테이블의 하나의 데이터를 가지고 오는 모델은 요리법(역자 주 : Recipe 단수형이다.)이다. 즉 Rails는 똑똑해서 이런 영어의 단수와 복수의 차이를 테이블과 모델 클래스에 연결해 준다. 즉 Company(클래스)는 companies(테이블)에 연결 시키고, person(모델)은 people 테이블에 연결 시킨다.
데이블과 모델 클래스와 어떻게 작동하는지 살펴 보기 위해서, controller를 만들어야 한다. 이 controller는 CRUD(create 생성, read 읽기, update 수정, delete 삭제) 작업을 하다. Rails는 이 controller도 무지 간단하게 만들어 준다.
그림 30. Recipe controller를 확인할 수 있다.
다시 명령창을 하나 띄워서, 아래의 명령을 입력하자.
ruby script\generate controller Recipe
위 명령은 RecipeController 클래스를 담고 있는 recipe_controller.rb 파일을 생성해 준다. 이 파일을 열고 그림 31과 같이 scaffold :recipe를 입력하자.
그림 31. RecipeController의 한 줄 코드
이 한 줄의 코드가 테이블에 생명을 불어 넣는다. 너무나 신기하다. 그럼 즉시 확인해 보도록 하자!
웹 브라우저를 열고, http://127.0.0.1:3000/recipe/new 입력해 보자. 그럼 그림 32와 같은 화면을 볼 수 있다.
그림 32. 새로운 요리법을 입력 받는 Page
죽이지 않는가? 한 것도 별로 없는데 데이터베이스에 값을 입력할 수 있다. 잠깐~ 여기서 두 개의 필드를 더 추가해 보도록 하겠다.
MySQL-Front를 이용해서, title과 instructions 사이에 description과 date 필드를 추가하자.
그림 33. description 필드 추가
그림 34. date 필드 추가
필드 추가 후, 웹 브라우저를 refresh하면 아래의 그림 35의 결과를 얻을 수 있다.
그림 35. 신규 필드 추가 후, 변화된 요리법 입력 화면
다시 한번 죽이지 않는가? 단지 테이블에 필드만 추가했을 뿐인데 말이야…
자! 진정하고 좋아하는 요리법을 입력하고 create 버튼을 눌러 보자.(그림 36)
그림 36. 신규 필드 추가 후, 변화된 요리법 입력 화면
그럼 37의 화면을 볼 수 있다.
그림 37. 모든 요리법 출력 화면
New recipe 링크를 클릭해서, 다른 요리법을 입력할 수 있다.
그림 38. 또 다른 요리법 입력하기
create 버튼을 누르면 방금 입력한 요리법이 추가된 것을 알 수 있다.(그림 39)
그림 39. 요리법 리스트
자~ 정리하면. 우리가 지금까지 했던 작업은 테이블 만들기, 스크립트 실행하기(두 개) 그리고 한 줄의 코드 추가 하기 였다. 이 작업만으로도 우리는 요리법을 추가, 조회, 삭제할 수 있는 이 모든 코드를 얻었다.
진짜~ 놀랍지 않은가?