반응형
관리자가 물품 등록을 하고, 물품관련 상세 내용을 올릴 수 있는 Depot 에플리케이션을 만들어봤다.
이제 고객이 들어와 물품을 보고 고르고, 구입할 수 있는 에플리케이션을 만들어보자

1) Catalog Listing (카탈로그 리스트)

depot> ruby script/generate controller store index

Store 라는 이름의 Controller를  generate 유틸리티로 만든다. 위에 index 가 붙었는데 이건 Method 이름이다.
전에는 Product 라는 Controller 만 만들었지만, 이번엔 Store 라는 Controller 를 만들며 그 안에 index 라는 Method 를 함께 만드는 것이다. 

웹페이지가 뜨는지 확인한다. http://localhost:3000/store

잘 만들어 졌다면, 첫번째로, 데이터 베이스에 있는 품목 리스트를 보여주는것으로 시작을 해보자.
strore_contoller.rb 안에 있는 index Method 를 바꿔줘야 한다.

depot/app/controllers/store_controller.rb

위의 코드는  Model 에서 품목 리스트를 들고 와야 한다는 내용의 코드이다.

자 다음은 Controller 에서 호출을 받은 Model 이 판매되고 있는 품목 리스트(producst_for_sale)를 Method 를 통해 찾는다.

depot/app/models/product.rb

find 는 Rails Method 이다. find Method 는 Product Object 를 들고 있는 Array 를 반환하는데 Array 안에는 데이터 베이스에서 받는 각각의 Row 별 값들이 들어있다.  :all 파라미터는 주어진 조건의 모든 Row 값들을 들고 온다는 뜻이며 :order 를 주어 "title" 컬럼으로 Sorting 되어 들고 오라는 뜻이다.
들고 온 뒤에는 find_products_for_sale Method 는 자신을 호출한 Controller 로 받아온 값들을 돌려준다.

자 Controller 는 값들을 받았으니, View 를 통해 결과값들을 보여줘야 한다.

depot/app/views/store/index.html.erb

아직 CSS 파일이 없어 보기 좀 그렇지만.. 일단 기능적으로 원하는 부분이 완료 되었다.
반응형
반응형
 
1) 리스트 이쁘게 만들기....

리스트가 너무 밋밋하다. 좀 꾸며보자..

데이터만의 Migration 을 해보자.. Method 가 3개다.. Up, adds, Down..
up: products 테이블을 지우고, adds 는 products 테이블에 3개의 데이터를 넣게 되며 down Method 는 테이블을 비운다.

depot> ruby script/generate migration add_test_data

위의 명령어 줄을 넣어주면 /db/migrate/20080601000003_add_test_data.rb 파일이 생성된다.
이 파일안에 코드를 넣게 되는데, Create Method 를 사용하여 넣어준다.


그런뒤 depot.css 와 image 파일들을 다음 경로에서 다운받아 각각 public/stylesheets 와 public/images 폴더에 넣어 두면 된다. add_test_data.rb 도 테스트 파일이기 때문에 직접 치지 않고 아래 링크에서 다운받아 사용해도 된다.


depot> rake db:migrate

자 rake 명령어 까지 모두 쳤다면, 파일 수정을 하여 css 파일을 사용하게 하며, 테이블로 리스트를 보여줌으로써 기존에 scaffold 가 만들어준 view 를 덮어 써보자

depot/app/views/layouts/products.html.erb

depot_c/app/views/products/index.html.erb

코드를 보면 대충 알겠지만, 
  a) list-line-odd, 와 list-line-even 을 돌려 홀수라인과 짝수라인 색을 다르게 하여 보여준다는것을 알 수 있다.
  b) 그리고 link_to 'Destroy' 를 보면 :confirm=> "Are You Sure" 가 씌여 있는데 'Destroy (없애다)' 링크를 누르면 확인 버튼
     이 팝업으로 떠 지우기전 확인을 하게 하는걸 알 수 있다.
  c) h Method 를 사용하여 product  title 과 description 에 남아있는 Html 코드를 뛰어 넘게 했다.

이렇게 함으로써 리스트까지 완료하였다.

이제껏 우리가 한 일을 정리해 보면
1) development 데이터베이스를 만들어 Rails 에플리케이션과 연결하였다.
2) Migrations 을 사용하여 Development 데이터 베이서의 스키마를 만들고 수정하였으며 테스트 데이터를 가동시켰다.
3) products 테이블을 만들었으며 scaffold generator 로 사용가능한 에플리케이션을 만들었다.
4) 코드도 작성했는데, 그중 하나는 유효여부를 확인하는 코드이며
5) view 코드를 작성하여 좀더 이쁜 리스트가 나오게 만들었다.


자.. iteration 4 는 여기서 끝이다.
여기까지 작업하면서 몇가지 궁금한 점이 생겼다. 작동이 어찌 되는거지? 그냥 따라 하기만 하면 되는건가?

솔직히 Rails 는 처음 경험해 보는 언어이며, MVC 구조도 처음이다. 그래서 이해 하지 못한 부분들이 있기 때문에 읽으면서 건너 뛴 부분들도 많다. 물론 모든 부분들을 이해하면 좋겠지만, 내가 웹 언어를 공부하는 방법중 하나는 따라하기다.
물론 처음 언어를 공부하게 된다면 심도있는 길을 선택해야 겠지만, 내 목표는 일단 Ruby on Rails 를 통한 MVC 구조 이해 및 agile web development 를 배우는 것이다. 
pdf 를 읽어보며 하나의 작은 쇼핑몰을 만들어 가는 이 책은 내 목표에 딱 맞는 듯 싶다.

좀더 공부해 보면 심도있게 재 정리 할 수도 있을 테고.. 그날이 오기만을 기다리며 읽어 내려갈 뿐.. ㅋㅋㅋ
자.. 이제 할일은..
depot> 폴더를 지우고, 다시 첨부터 해보는 거다. iteration 이 분단위로 일어나기 때문에 총 15분 이내로 다시 한번 만들어 볼 수 있을 듯.. ㅋㅋㅋ
반응형
반응형


1) Validation

Iteration 3  에서는 textbox 들에서 들어오는 변수들의 유효성 확인을 한다.

app/models/product.rb 파일을 열어 Class 안에 다음 줄을 추가한다.

자 위에 추가된 부분들로
   a) title, description 그리고 image_url 필드가 비어있는 지
   b) Price 필드에 $0.01 이상의 가격이 들어가 있는지
   c) title 의 중복이 있는지
   d) image url 이 유효한지
의 유효성을 확인한다.


반응형
반응형


1) 없는 컬럼 추가하기
Iteration 1 에서 Product 테이블을 만들었고, 페이지에서 데이터를 추가하고 빼고 하는 페이지들을 만들어 봤다.
Iteration 2 시작에서는 필요한 컬럼중 초기에 만들지 않은 컬럼을 테이블에 추가해 보기로 하겠다.
가격(Price) 컬럼을 만들어 보겠다.

depot> ruby script/generate migration add_price_toProduct price:decimal

위의 명령어를 치게 되면 아래와 같은 .rb 즉 루비 파일이 생성된다.
db/migrate/20080601000002_add_price_to_product.rb

Coordinated Univeral Time, UTC 를 토대로 파일이 만들어지며, 파일 이름은 YYYYMMDDhhmmss 형태로 시간으로 형성된다. 위의 파일을 열면 아래 링크와 같은 코드를 볼 수 있을 것이다.
http://media.pragprog.com/titles/rails3/code/depot_a/db/migrate/20080601000002_add_price_to_product.rb
관련된 설명은 생략하겠다. 지금은 그냥 보기만 해도 프로그램을 해본 지식이 있는 분들이라면 알아볼 수 있을것이다.
이해가 안되더라도 지금은 크게 문제가 되지 않는다.

depot> rake db:migrate

명령어를 치면 Rails 는 위에 만들어진 루비 파일을 적용시킨다.
(주의 할점: 가격 변수 형태를 Decimal 로 잡았다. Float 으로 잡지 않은 이유는 반올림시 Float 형태는 오류가 있기 때문이다. )

다음은 Views 쪽 파일들을 열어 필요한 부분을 수정해야 한다.

depot/app/views/products/index.html.erb

depot/app/views/products/new.html.erb

depot/app/views/products/edit.html.erb

여기까지 수정이 완료 되어 페이지들을 확인해 보면 Price 컬럼이 추가되어 있는걸 볼 수 있다.
서버를 돌리고 있었다 하더라고 다시 실행할 필요가 없는 이유는 페이지에서 Model 에 요청이 들어가면 최근 업데이트된 db 스키마로 자동 업데이트 되기 때문이다.

Download depot_a/app/views/products/show.html.erb

Markup 이 함께 보여지고 싶다면 h 를 제거 하면 된다.
depot/app/views/products/show.html.erb
반응형
반응형


1) Depot application 을 만든다.

rails Depot : 만들게 되면 Depot 디렉토리 안에 필요한 폴더와 파일들이 만들어진다.
rails --database=mysql Depot: MySql 을 사용하여 db 를 만들게 된다.

2) DataBase 만들기
Depot> rake db:create RAILS_ENV='development'
Depot> mysqladmin -u root create depot_development (mySQL 사용시)

Depot\Config\> 의 database.yml 파이을 열면 다음과 같이 보여진다.
development:

adapter: mysql
encoding: utf8
Ë database: depot_development
Ì username: root
password:
host: localhost

이 외에도 리스트에 넣을 수 있는 게 있다.
Socket :  MySQL 데이터베이스 아답터에게 서버와의 소켓을 설정할 수 있으며 또한 아래의 명령어로 올바른 소켓을 찾을 수 있다.
mysql_config --socket
pool : 어플리케이션에 연결될 수 있는 사용자 수

3) 디비 연결 테스트 하기
명령라인 2개로 전체적인 application 의 틀과 db 연결을 만들어봤다.
mySql 서버 시작 명령어 : sudo /etc/init.d/mywql start
잘 되는 지 테스트를 해보려면 아래의 명령어를 치면 된다.
depot> rake db:migrate
이 명령어가 무엇을 하는지는 지금 알필요가 있을까? 있더라도 패스..
다음의 명령어를 실행해 보자, 에러가 났다면 위의 yml 파일을 열어 확인하자.
depot> mysql -u root depot_development
mysql> create table dummy(i int);
mysql> drop table dummy;
mysql> exit 혹은 quit

4) 품목 모델과 시스템 관리 어플리케이션을 만들어보자
depot> ruby script/generate scaffold product  title:string description:text image_url:string
명령어를 치고 나면 여러가지 일들이 일어난다. MVC 모델 중 Model 관련된 부분들이 만들어진다.
위의 명령어를 치면 각 model, view, controllers 폴더 아래 필요한 파일들과 폴더들이 만들어진다.

depot> rake db:migrate
위의 명령어는 만들어진 development 데이터베이스에, product 테이블에, title 컬럼은 string이며 description 컬럼은 text, 그리고 image_url 컬럼은 string 으로 세팅이 된다. 정말 만들어졌는지 궁금하다면, mysql 에서 depot_development db 에 연결하여 select * from product 라고 쳐보자. 아마 아무런 데이터가 있지 않겠지만은, 테이블이 생성된걸 확인 할 수 있을 것이다.

위의 명령어들로 일단 db 에 테이블 도 만들어졌고, application 에서 db 연결될 수 있도록 준비가 다 되었다.

자 그럼 WEBrick-based web serer 를 실행시켜 보자
depot> ruby script/server

서버가 실행되고 있다면, 익스플로러 혹은 다른 웹 브라우저 상단/하단 URL 창에
http://localhost:3000/products
라고 치면, 페이지들이 볼 수 있을 것이다.

이로써 iteration 1 이 끝났다.

출처 : Agile Web Development with Rails (Third Edition by Sam Ruby, Dave Thomas, David Heinemeier Hansoon with etc) 위의 내용은 직접 웹에서 구입한 agile Web development with Rails 의 pdf 파일(영문) 에서 읽고 이해한 내용 중, 개인적으로 필요한 부분을 추스려 올린 것으로, 만약 문제시 삭제될 수 있다.
반응형

+ Recent posts