RoR Validation 맛보기

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의 실체)는 어디에 있는거지??

Aptana + RadRails 설치와 설정

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 빨리 다운 받기

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

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

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

Eclipse에 플러그인 설치하고 돌려보려는데 잘 안되네요.[footnote]instant rails가 아니라서 그럴수도 있습니다.[/footnote] 흠.. 대엽님이 번역한 글[footnote]    – 루비 온 레일즈, 이클립스를 만나다(1)
    – 루비 온 레일즈, 이클립스를 만나다(2)
    – 루비 온 레일즈, 이클립스를 만나다(3)[/footnote]에 나와있는 설정 내용과 비슷한데 이상하게 잘 안되서 찾아 보다가 저걸 발견했지만 수업이 있어서 다녀온 다음에 해봐야겠습니다.  ㅠ.ㅠ

Rolling with Ruby on Rails Revisited 실습 후기

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

그 전에 설치와 서버 구동에 관한 부분은 위 글과 달리 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 셋을 번갈아 가며 눌러보다 보면 멈추게 됩니다. [footnote]콘솔창이 느리게 반응해서 어떤 키로 멈췄는지 모르겠네요;; 아마도 c 일듯.[/footnote]

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

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

과연 내 맘대로 주무룰수 있을 때 까지 공부하는게 얼마나 힘들지 모르겠지만 좋은 번역서들과 책들이 나오고 있기 때문에 재밌게 공부할 수 있을 것 같네요. RoR 멋져효~