Store 라는 이름의 Controller를 generate 유틸리티로 만든다. 위에 index 가 붙었는데 이건 Method 이름이다.
전에는 Product 라는 Controller 만 만들었지만, 이번엔 Store 라는 Controller 를 만들며 그 안에 index 라는 Method 를 함께 만드는 것이다.
잘 만들어 졌다면, 첫번째로, 데이터 베이스에 있는 품목 리스트를 보여주는것으로 시작을 해보자.
strore_contoller.rb 안에 있는 index Method 를 바꿔줘야 한다.
depot/app/controllers/store_controller.rb
class StoreController < ApplicationController
def index
@products = Product.find_products_for_sale
end
end
위의 코드는 Model 에서 품목 리스트를 들고 와야 한다는 내용의 코드이다.
자 다음은 Controller 에서 호출을 받은 Model 이 판매되고 있는 품목 리스트(producst_for_sale)를 Method 를 통해 찾는다.
depot/app/models/product.rb
class Product < ActiveRecord::Base
def self.find_products_for_sale
find(:all, :order => "title" )
end
# validation stuff...
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
<h1>Your Pragmatic Catalog</h1>
<% for product in @products -%>
위의 명령어 줄을 넣어주면 /db/migrate/20080601000003_add_test_data.rb 파일이 생성된다.
이 파일안에 코드를 넣게 되는데, Create Method 를 사용하여 넣어준다.
class AddTestData < ActiveRecord::Migration
def self.up
Product.delete_all
Product.create(:title => 'Pragmatic Version Control' ,
:description =>
%{<p>
This book is a recipe-based approach to using Subversion that will
get you up and running quickly---and correctly. All projects need
version control: it's a foundational piece of any project' s
infrastructure. Yet half of all project teams in the U.S. don't use
any version control at all. Many others don't use it well, and end
up experiencing time-consuming problems.
</p>},
그런뒤 depot.css 와 image 파일들을 다음 경로에서 다운받아 각각 public/stylesheets 와 public/images 폴더에 넣어 두면 된다. add_test_data.rb 도 테스트 파일이기 때문에 직접 치지 않고 아래 링크에서 다운받아 사용해도 된다.
코드를 보면 대충 알겠지만,
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) 없는 컬럼 추가하기
Iteration 1 에서 Product 테이블을 만들었고, 페이지에서 데이터를 추가하고 빼고 하는 페이지들을 만들어 봤다.
Iteration 2 시작에서는 필요한 컬럼중 초기에 만들지 않은 컬럼을 테이블에 추가해 보기로 하겠다.
가격(Price) 컬럼을 만들어 보겠다.
이 외에도 리스트에 넣을 수 있는 게 있다.
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 파일(영문) 에서 읽고 이해한 내용 중, 개인적으로 필요한 부분을 추스려 올린 것으로, 만약 문제시 삭제될 수 있다.