2. 레일스는 어떻게 동작하는가?

참조 : 레일스를 위한 루비

-애플리케이션 개발 과정
1. 모델 구현
2. 컨트롤러 구현
3. 뷰 구현

-레일즈의 MVC
모델: ActiveRecord – actionpack에 속함
뷰: ActionVIew – actionpack에 속함
컨트롤러: ActionController – activerecord에 속함

gems 폴더 아래에 위치 합니다.
사용자 삽입 이미지
– Rails 샘플 애플리케이션 개발하기
1. 모델 구현
    – 테이블의 이름은 복수형
    – id라는 필드가 있어야 함
    – y가 x에 속하면 y테이블에 x_id가 있어야 함
    – SQL로 테이블을 만들어도 되고
    – 레일즈의 마이그레이션을 사용해도 된다.
    – 모델사이의 연관 설정하기
       – 속한다. belong_to
       – 가지고 있다. has_many
2. 컨트롤러 구현
    – 액션 구현
    – 전체 컨트롤러를 나타내는 ApplicationController
3. 뷰 구현
    – layout “레이아웃 파일 이름” :: 레이아웃 설정
    – 레이아웃의 컨텐츠가 들어갈 위치에 <%= @content_for_layout %> 삽입
    – <% @composer.each do |composer| %> :: JSTL의 <c:forEach /> 와 비슷한 것
4. 접속하기
    – 첫 페이지 변경하기 :: conflg/routes.rb 파일에서 설정
    – 예) map.connect ”, :controller => “main”, :action => “welcome”

– 래일즈 애플리케이션 생명주기
1. 클라이언트가 서버로 요청을 보냄
2. 디스패처가 요청 받아서 담당할 컨트롤러 찾음
3. 요청을 처리하고 해당 액션과 연결되어 있는 뷰로 결과를 랜더링
4. ERb가 루비 코드를 변환해서 HTML 완성후 응답을 돌려줌
5. 클라이언트에서 HTML 확인

Four Days on Rails 번역 완료

원문 : http://rails.homelinux.org/
한글판 : cm252.pdf
후기 :
대엽님의 댓글로 시작하여 “Four Days on Rails” 번역을 완료했습니다. 1,2장은 대엽님. 3,4장은 제가 번역을 했고 편집은 전부 대엽님이 해주셨습니다. 완전 깔끔한 편집에 놀랐습니다. 대단해요.

이 글을 보기전에 정말 간단한 따라하기 글이 있어서 그걸 보고나서 놀랍다는 생각은 했지만 scaffold로 코드 생성한 다음에는 뭘 어떻게 고쳐야 할지 몰랐었는데 저 글을 보면 대략 어떤 작업들을 해서 커스터마이징 해나가는지 파악할 수 있습니다.

Scffold로 코드를 생성하는 것은 간단하지만 원하는 웹 애플리케이션으로 만들려면 역시 상당한 노력이 필요하리라는 것을 짐작하기에 충분했으며 공부할 것도 적지 않다는 것을 느낄 수 있었습니다.

관심있으신 분들은 보시다가 개선사항에 대한 피드백을 주시면 감사하겠습니다.

사용자 삽입 이미지조만간 저위에 다음과 같이 한줄이 추가 되면 또 포스팅 하겠습니다. 헤헷

  • Four Days on Rails(Korean) .pdf format(967k) (Dae-yeop Lee, Kee-sun Baek)

rails로 생성한 scaffold 코드 살펴보기 – View

View는 세 가지 구성요소로 이루어져 있습니다. Layout, Template, Partial 이 세가지 입니다. 각각의 관계를 그림으로 나타내면 다음과 같습니다.
사용자 삽입 이미지Layout 은 각각의 Template 앞 뒤에 해당하는 HTML 을 넣을 수 있습니다.
Template 은 각각의 페이지에 해당하며
Partial 은 각각의 페이지 구성요소 중에 여러 페이지에서 사용할 부분을 따로 빼낸 부분입니다.
사용자 삽입 이미지위 표에 각각의 default name이 적혀있으며 파일이 위치 할 폴더를 보여주고 있습니다.

Layout

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
       “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>
<head>
  <meta http-equiv=”content-type” content=”text/html;charset=UTF-8″ />
  <title>Categories: <%= controller.action_name %></title>
  <%= stylesheet_link_tag ‘scaffold’ %>
</head>
<body>
<h1><%=@heading %></h1>
<p style=”color: green”><%= flash[:notice] %></p>

<%= yield  %>

</body>
</html>


스케폴드에서 만들어준 레이아웃 코드입니다.
스타일 시트는 따옴표 사이에 이름을 주면 rails의 웹 기본 폴더인 public의 하위 디렉토리 stylesheets 밑에 위치한 파일을 찾게 됩니다.
사용자 삽입 이미지파란색 부분의 코드는 임의로 넣어준 것입니다. 각각의 페이지에서 @heading 변수의 값을 바꿔주면 여기서 출력해줄 값도 변하게 됩니다.

Template

<% @heading = “Edit Category” %>
<% form_tag :action => ‘update’, :id => @category do %>
    <%= render :partial => ‘form’ %>
    <%= submit_tag ‘Edit’ %>
<% end %>

<%= link_to ‘Show’, :action => ‘show’, :id => @category %>
|
<%= link_to ‘Back’, :action => ‘list’ %>


@heading 변수에 Edit Category 라는 값을 주고 있습니다. 따라서 레이아웃에서 이 값을 받아서 화면에 출력하게 될 것입니다. 그리고 여기서 주목할 부분은 빨간색 부분인 render :partial 입니다. 저 코드가 위치한 자리에 form이라는 partial을 사용하라는 의미 인 것 같습니다. 그럼 _form.rhtml을 찾아서 저 위치에 포함시켜 줍니다.

Partial
<%= error_messages_for ‘category’ %>

<!–[form:category]–>
<p><label for=”category_category”>Category</label><br/>
<%= text_field ‘category’, ‘category’, “size”=>20, “maxlength”=>20  %></p>

<p><label for=”category_created_on”>Created on</label><br/>
<%= datetime_select ‘category’, ‘created_on’  %></p>

<p><label for=”category_updated_on”>Updated on</label><br/>
<%= datetime_select ‘category’, ‘updated_on’  %></p>
<!–[eoform:category]–>


_form.rhtml 파일입니다.
맨 윗 부분은 이전 글에서 예상했던 것 처럼 에러 메시지를 출력하는 부분이 맞습니다.
파란색 부분은 별도로 추가해준 부분입니다.
여기서 살펴볼 코드는 빨간색 부분입니다. text_field 는 보여줄 <input /> 의 타입을 지정해 주는 것으로 예상이 되며 첫 번째 인자 ‘category’는 테이블이고 두 번째 인자 ‘category’는 테이블의 컬럼 이름입니다.

rails로 생성한 scaffold 코드 살펴보기 – Controller

class CategoriesController < ApplicationController
  def index
    list
    render :action => ‘list’
  end

컨트롤러의 첫부분 입니다. list 메소드를 호출하고 list라는 이름의 뷰를 사용하도록 render :action 을 사용합니다.

  def destroy
    Category.find(params[:id]).destroy
    redirect_to :action => ‘list’
  end

컨트롤러의 마지막 부분으로 지우고 난 뒤 list 페이지로 이동하도록 redirect_to :action 을 사용합니다.

컨트롤러 곳곳에서 사용하고 있는 find, find_all, new, save, update_attributes, destroy 이런 메소드들은 ActiveRecord에 있는 메소드를 사용한다고 합니다. ActiveRecord에 대한 공부가 필요하군요. 이 전 글에서 제가 궁금해 했었던 Dao 역할을 하는 녀석이 바로 이 녀석이였던 것 같습니다.

RadRails의 RI 탭에서 검색하면 바로 레퍼런스를 참조 할 수 있습니다. 그런데 조금 오래 걸립니다. 뻗어버린 줄 알았습니다…
사용자 삽입 이미지