Whiteship's Note

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.




: 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 :