Whiteship's Note


Active Record

RUBY/on Rails : 2007.06.01 21:38


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

번역

액티브 레코드

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

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

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

top

Write a comment.


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

RUBY/on Rails : 2007.05.28 12:10


엄청나게 삽질을 했네요;; 분명히 레퍼런스대로 다 따라했는데 안 되는거에요. 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)로 했을 때 잘 안되는 경우가 있는데 그럴 떄는 필드 사이즈를 조정해 주세요.

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

top

  1. Favicon of http://truthiness.pe.kr BlogIcon ongs 2007.05.28 18:16 PERM. MOD/DEL REPLY

    요즘 RoR공부하고 계시는건가요?

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.05.28 18:48 신고 PERM MOD/DEL

    넹 재미로요.
    Spring 레퍼런스만 두 달인가 봤더니 머리가 아파서요. 잠시 바람피는 심정으로 보고 있어요.ㅋㅋ

    요즘 AppFuse 하시죠? 잘 보고 있답니다. AppFuse 할까 RoR 할까 고민하다가 AppFuse는 2.0 정식버젼 나오면 하려고 RoR을 선택했어요.

Write a comment.


Ruby on Rails 튜토리얼 링크 모음

RUBY/on Rails : 2007.05.27 16:34


원문 : 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, 번역 기사


top

  1. Favicon of http://humbleprogrammer.net/blog BlogIcon HumbleProgrammer 2007.05.27 19:42 PERM. MOD/DEL REPLY

    기선님은 기존 자바 진영 프레임워크에 대한 기반지식이 있으시니까,
    튜토리얼부터 보시는 것보다는, ActiveRecord , ActionController , ActionView 이렇게 MVC 컴포넌트별로 각각의 자바 프레임워크에 대응해서 살펴보시면, 금방 익히실것 같아요^^

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.05.27 21:02 신고 PERM MOD/DEL

    4일 완성까지만 보고 험블님께서 번역하고 계신 책을 보며 공부하려구요.
    베타리딩 열심히 해드릴께요. :)

  2. 999 2008.12.16 10:21 PERM. MOD/DEL REPLY

    좋은정보 감사합니다~

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.12.16 12:22 신고 PERM MOD/DEL

    넵~

Write a comment.


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

RUBY/on Rails : 2007.05.27 10:31


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'는 테이블의 컬럼 이름입니다.
top

TAG RoR, View

Write a comment.


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

RUBY/on Rails : 2007.05.26 23:42



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



top

Write a comment.


RoR Validation 맛보기

RUBY/on Rails : 2007.05.26 11:32


RoR 4일 완성이라는 40페이지? 정도의 책(무료로 다운 가능합니다.)이 있길래 그 책을 보며 RoR 맛을 보려고 합니다.(일본어랑, 중국어로 된 번역본은 있는데 한글판은 없네요.ㅠ.ㅠ)

흠.. 테이블을 잘 못 만들어서 중복 된 값이 들어가게 되었네요. 테이블을 수정해서 중복된 이름의 category를 못만들게 하면 scaffold로 생성한 뷰에서 에러가 발생합니다.

이런 에러 로그를 보여주는 대신 validation 에러 메시지를 보여주도록 모델에 간단하게 validation 로직을 추가할 수 있습니다.

class Category < ActiveRecord::Base
  validates_length_of :category, :within => 1..20
  validates_uniqueness_of :category, :message => "already exists"
end

코드가 엄청나게 직관적이기 때문에 어떤 내용인지 짐작할 수 있을 것입니다.

이렇게 코드를 추가해주고 서버를 껐다 다시 돌릴 필요도 없이 그냥 계속 작업을 합니다.
사용자 삽입 이미지
이미 등록되어 있는 Category인 스터디를 입력하면...

사용자 삽입 이미지
흠.. 정말 놀랍도록 간단하고 영리한 프레임워크입니다.

뷰 코드를 보면 제일 상단에 이미 에러 객체의 내용을 출력하는 것으로 보이는 코드가 들어있습니다.
<%= error_messages_for 'category' %>

<!--[form:category]-->
<p><label for="category_category">Category</label><br/>
<%= text_field 'category', 'category'  %></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]-->

그리고 컨트롤러에서 create 메소드를 보겠습니다.
  def create
    @category = Category.new(params[:category])
    if @category.save
      flash[:notice] = 'Category was successfully created.'
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

흠.. 이건 좀 모르겠네요. 분명 여기서 Category 모델을 사용자가 폼에서 입력하는 데이터를 바인딩하고(Category.new(params[:category]))나서.. 저장할 때(@category.save) Validation을 걸리게 되고 else문에 걸려서 계속해서 "new" 즉 생성하는 페이지를 다시 로딩 할 때 위에서 봤던 뷰 코드가 다시 읽히게 되고 그 때 에러의 내용을 출력(<%= error_messages_for 'category' %>)해주는 것 같은데. 대체 Dao 역할을 하는 코드(@category.save의 실체)는 어디에 있는거지??
top

  1. Favicon of http://decoder.tistory.com BlogIcon decoder 2007.05.26 15:06 신고 PERM. MOD/DEL REPLY

    인터넷에 올라오는 많은 문서들이 일본어로 번역되는 경우는 많은데, 한글로 옮겨져 있는 경우는 흔치 않더라구요. 안타깝지만 현실입니다. JDK도 일어판이 있잖아요.. ㅡㅡ;

    이런 문서는 한글로 옮겨보고 싶은 충동을 자극하죠.. -_-

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.05.26 21:04 신고 PERM MOD/DEL

    넹 안타깝네요.
    이번에 번역하고 있는 IBM 기사 번역하는게 끝나면 저걸 번역해서 올려야겠네요.

    Favicon of http://decoder.tistory.com BlogIcon decoder 2007.05.27 01:59 신고 PERM MOD/DEL

    재밌는 건 같이 하시죠~ :)

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.05.27 10:30 PERM MOD/DEL

    좋아요. ㅎㅎ
    앞뒤로 나눠서 둘이 하면 금방 하겠네요.
    하고나서 AJN에 베타리딩을 부탁드려서 피드백 받아도 되겠네요. :)

    Favicon of http://decoder.tistory.com BlogIcon decoder 2007.05.27 20:45 신고 PERM MOD/DEL

    ㅎㅎ 넵. 그럼 제가 2일차까지 먼저 진행하고 있겠습니다. :)

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.05.27 21:03 신고 PERM MOD/DEL

    넹 그럼 전 3일차 부터 번역하겠습니다.

Write a comment.


Aptana+RadRails와 Instant Rails 빨리 다운 받기

RUBY/on Rails : 2007.05.25 22:28


Aptana + RadRails 빨리 다운 받기
Instant Rails 빨리 다운 받기
둘 다 window 용입니다.
사용자 삽입 이미지사용자 삽입 이미지

AJN 서버를 이용했습니다. 도통 느려터져서(제가 받을 땐 30~50kb/s정도 나오던데요.) 답답하신 분들은 위 링크 받으시면 됩니다.



top

Write a comment.


Aptana + RadRails 설치와 설정

RUBY/on Rails : 2007.05.25 18:54


Eclipse로는 아무래도 안되는데 Aptana는 한 방에 플러그인을 사용할 수 있었습니다. Eclipse용 플러그인이 뭔가 이상한듯...

Aptana는 처음 써보는데 Eclipse랑 거의 똑같은 것 같네요.
사용자 삽입 이미지

0. Instant Rails를 다운로드 하여 적당한 위치에 압축을 풉니다.
-이것으로 Ruby, Rails, 서버, DB 설치 끝입니다.

1. 여기 Aptana + radrails를 다운로드 합니다.
-86메가 인데 굉장히 느립니다.
-이미 Aptana를 사용중이시면 플러그인만 다운로드 하실 수도 있습니다.

2. Eclipse에서 플러그인 설치하듯이 설치하려고 하면 이미 업데이트 사이트 목록에 추가되어 있는 것을 볼 수 있습니다. 따라서 그냥 체크하고 설치만 하면 됩니다.
사용자 삽입 이미지

3. RDT 플러인을 설정해줍니다.
사용자 삽입 이미지
Rails 에는 설정해줄 것이 없고 Ruby에 Installed Interpreter만 설정해 주면 됩니다. 설정해주는 방법은 오른쪽에 Add버튼을 클릭한 뒤 디렉토리 버튼을 눌러서 "Instant Ruby설치 디렉토리"/ruby 폴더를 지정해 주면 됩니다.

4. 끝입니다. 이제 간단하게 Rails 프로젝트를 만들고 db설정 파일에서 계정 설정해주고 제너레이터로 scaffold 사용해서 간단하게 만들고 server 탭에서 브라우져 모양 누르면 알아서 서버 돌리고 내장 브라우저로 보여줍니다.

Good!!

Aptana + RadRails 빨리 다운 받기
Instant Rails 빨리 다운 받기
top

  1. Favicon of http://chanwook.tistory.com BlogIcon 찬욱 2007.05.25 19:58 PERM. MOD/DEL REPLY

    저보다 먼저 시작하시니 좋은데요~ 전 그냥 따라하면 될 뿐~ㅎㅎ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.05.25 21:12 PERM MOD/DEL

    먼저라고 할 것도 없어~
    이건 뭐 5분이면 따라 한다는거~ㅋㅋ

    이제부터가 갈길이 멀어보이는데;; 어서 앞장서줘~

Write a comment.


Eclipse(or Aptana)용 RoR 플러그인 설정

RUBY/on Rails : 2007.05.25 15:48


참조 : http://www.aptana.com/docs/index.php/Configuring_your_RadRails_setup

Eclipse든 Aptana든 Rails플러그인 RadRails를 설치하려면 RDT가 먼저 설치되어 있어야 하고 둘 다 제대로 설정 안해주면 잘 안돌아 간다고 합니다.

Eclipse에 플러그인 설치하고 돌려보려는데 잘 안되네요.[각주:1] 흠.. 대엽님이 번역한 글[각주:2]에 나와있는 설정 내용과 비슷한데 이상하게 잘 안되서 찾아 보다가 저걸 발견했지만 수업이 있어서 다녀온 다음에 해봐야겠습니다.  ㅠ.ㅠ
top

Write a comment.


Rolling with Ruby on Rails Revisited 실습 후기

RUBY/on Rails : 2007.05.25 12:12


와 세상에 이렇게 간단하다니;;; 정말 RoR 장난아니네요.
- Rolling with Ruby on Rails Revisited, 번역 기사
- Rolling with Ruby on Rails Revisited2, 번역 기사
위 글 두개를 참조 하며 따라해 보았습니다. 번역 기사에 오타(특히 코드 주변)[각주:1]가 있긴 하지만 화면 캡쳐 한 걸 보면 쉽게 따라하실 수 있습니다.

그 전에 설치와 서버 구동에 관한 부분은 위 글과 달리 http://www.rubyonrails.org/down 이 글을 참조 했습니다.

프로젝트 만드는 방법
rails 프로젝트 패키지명

DB 이름 convention
프로젝트 홈 이름_development

DB 설정
비번 없는 root 계정에 위의 DB 이름을 defalut로 사용하기 때문에 별다른 설정이 필요 없을 수도 있습니다.
프로젝트홈/config/database.yml

Scaffold로 기본적인 CRUD를 위한 모델, 컨트롤러, 뷰 생성하기
ruby script/generate scaffold 모델명 컨트롤러명

서버 구동 하기
ruby script/server

서버 접속하기
http://localhost:3000

서버 멈추기
Ctrl + c, Ctrl + z, Ctrl + x 셋을 번갈아 가며 눌러보다 보면 멈추게 됩니다. [각주:2]

프로젝트 구조
- 프로젝트 홈
사용자 삽입 이미지

- app
사용자 삽입 이미지

와 이걸로 게시판 만들면 정말 5분만에 만들겠네요. 예제 따라하면서 자동으로 만들어 주는 화면과 컨틀롤러들이 동작하는 걸 보고 깜짝 놀랐습니다. 아직 화면을 바꾸고 컨트롤러의 동작을 바꾸지는 못하지만 이런 기본 포맷만 만들어서 보여주기에는 더없이 좋은 것 같습니다.

좀 더 공부해서 화면과 컨트롤러와 모델을 내 맘대로 수정할 수만 있으면 지금 Spring, Hibernate로 하고 있는 학교 프로젝트들을 좀 더 쉽게 만들 수 있을 것 같다는 느낌이 듭니다.

과연 내 맘대로 주무룰수 있을 때 까지 공부하는게 얼마나 힘들지 모르겠지만 좋은 번역서들과 책들이 나오고 있기 때문에 재밌게 공부할 수 있을 것 같네요. RoR 멋져효~
  1. Reflection을 반사라고 번역한 부분이 꽤 인상적이였습니다. [본문으로]
  2. 콘솔창이 느리게 반응해서 어떤 키로 멈췄는지 모르겠네요;; 아마도 c 일듯. [본문으로]
top

TAG ol, RoR
  1. 요술뱃살 2007.05.29 19:25 PERM. MOD/DEL REPLY

    루비 정말 대단한거 같아요!!

    초보 프로그래머인 저도 뭣도 모르고 코드 몇 줄 만지니깐 웹 애플리케이션이 순식간에 만들어지더라구요;

    앞으로 자주 찾아오겠습니다.

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.05.29 22:37 PERM MOD/DEL

    네 RoR의 Scaffold는 정말 대단한 것 같습니다.

    저도 많이 놀랐었는데요.

    자주 찾아오시게끔 열공해야겠네요. :)

Write a comment.


RoR Start~

RUBY/on Rails : 2007.05.24 23:53


설치
- http://www.rubyonrails.org/down

가이드
- Rolling with Ruby on Rails Revisited, 번역 기사
- Rolling with Ruby on Rails Revisited2, 번역 기사

Eclipse 에서 돌려보기
- Ruby on Rails Meets Eclipse,
- 번역 기사
    - 루비 온 레일즈, 이클립스를 만나다(1)
    - 루비 온 레일즈, 이클립스를 만나다(2)
    - 루비 온 레일즈, 이클립스를 만나다(3)
top

Write a comment.