Active Record

원문 : http://www.martinfowler.com/eaaCatalog/activeRecord.html

번역

액티브 레코드


테이터베이스의 테이블 또는 뷰의 레코드를 랩핑한 것에 해당 데이터를 사용할 도메인 로직을 추가한 객체이다.


자세한 설명은 P of EAA 페이지 160을 참조.

사용자 삽입 이미지데이터와 행위를 가지고 있는 객체이다. 여기 있는 데이터의 대부분은 영속성을 가지며 데이터베이스에 저장된다.  액티브 레코드는 데이터에 접근하는 로직을 도메인 객체에 넣는 가장 노골적인(명백한, 분명한) 접근 방법이다. 이 방법을 사용하면 누구든지 해당 데이터를 데이터베이스에서 어떻게 읽어오고 저장할지 알 수 있다.

“4일간 RoR” Item 테이블 만들 때 주의~

엄청나게 삽질을 했네요;; 분명히 레퍼런스대로 다 따라했는데 안 되는거에요. priority에 값을 줬는데 안줬다고 에러가 나는데 이것 참 난감하더군요.

그래서 따라하던 소스코드는 지워버리고 http://rails.homelinux.org/ 여기서 소스코드를 받아서 돌려보고 있는데 역시나 같은 에러가 발생합니다. 이거 대체 뭐야… 분명히 window랑 Linux에서 테스트 했다고 했는뎅;; 하며서 다시 위 링크를 살펴봤습니다.

페이지 맨 아래에 두 줄..

In particular, I have had reports that the data type tinyint(1) causes
problems in the Priority field in the Item table – if this happens to
you, please try increasing the size of the field.

=> Item 테이블의 Priority 의 데이타 타입을 tinyint(1)로 했을 때 잘 안되는 경우가 있는데 그럴 떄는 필드 사이즈를 조정해 주세요.

ㄷㄷㄷ;; 이것 때문에 몇 시간을 소비한거야!! ㅠ.ㅠ
사용자 삽입 이미지휴~ 이렇게 수정해주고 나니 잘 돌아가네요. 이런~ 날려버린 나의 소스 코드 다시 만들어야 겠네요.ㅋㅋ

Ruby on Rails 튜토리얼 링크 모음

원문 : http://the-est.com/blog/acher/entry/Top-12-Ruby-on-Rails-Tutorials

링크만 요약합니다.

  1. Rolling with Ruby on Rails
  2. Rolling with Ruby on Rails, Part 2
  3. Four Days on Rails (PDF)
  4. Really Getting Started in Rails
  5. Tutorial in Ruby on Rails
  6. Fast-track your Web apps with Ruby on Rails 
  7. Getting Your Feet Wet With Ruby on Rails 
  8. How to make a todo list program with Rails 
  9. Ajax on Rails
  10. Many to Many Tutorial for Rails (PDF) 
  11. Distributing Rails Applications – A Tutorial 
  12. Installing Ruby on Rails with Lighttpd and MySQL on Fedora Core 4

1, 2번 링크는 저번에 봤던 기사의 초본인가 보군요.
Rolling with Ruby on Rails Revisited, 번역 기사
Rolling with Ruby on Rails Revisited2, 번역 기사

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