소스코드

원서의 코드는 레일스 1.2를 기준으로 작성되었으나, 번역 진행 중 레일스 2.0이 출시되었습니다.

번역서에는 원서의 코드가 그대로 실려 있습니다.

레일스 2.0에 따라 변경된 코드와 본문 내용에서 수정할 내용은 이곳에 올립니다. (업데이트중)

레일스 버전에 관해

책에 있는 예제를 그대로 실행하고 싶으시면, 아래 명령을 통해 레일스 1.2.6 버전을 설치(또는 다운그레이드)하시면 됩니다.

  1. gem install rails --version 1.2.6 include_dependencies

rails -v 명령을 사용해서 현재 설치되어 있는 레일스 버전을 확인해보세요.

  1. Rails 2.0.2  (예제의 일부분이 동작하지 않습니다. 아래 내용을 참고하세요)
  2. 또는
  3. Rails 1.2.6  (예제를 그대로 동작시켜 볼 수 있습니다)

1장

p4

데이터베이스로 mysql을 사용하려면

  1. rails people -d mysql

이라고 명시해주세요

config/database.yml에서 데이터베이스 패스워드등의 설정을 변경할 수 있습니다.

p 5

 

  1. $ script/generate model Person

을 아래처럼 바꿔주세요

  1. $ script/generate scaffold Person
리소스 기반 컨트롤러의 복수형 규칙

레일스 2.0에서는 부록 E에서 설명하고 있는, 리소스 중심 개발을 위해 기본적인 스캐폴드도 REST스럽게 작성해줍니다. (자세한 내용은 부록E 참조)

 

주의할것은 이런 리소스 기반 컨트롤러의 이름에도 기본적으로 복수형규칙이 적용된다는 것입니다.

예제에서, 컨트롤러 이름은 people_controller가 아닌 peoples_controller 입니다.

1

기본적으로 생성되는 메서드도 HTTP 메서드에 대응하도록 7개가 선언됩니다. 자세한 내용은 473쪽을 참조하세요

예제의 list 메서드는 레일스 2.0의 리소스 기반 스캐폴드에서는 index 메서드에 해당합니다.

p 11

list.rhtml 이 아닌 index.html.erb를 참조하시면 됩니다.

 

list.rhtml => index.html.erb

start_form_tag 와 end_form_tag 는 레일스 2.0에서 사라졌습니다(Deprecated) 아래와 같이 form_tag를 사용하세요

  1. <% form_tag ‘peoples’ , :method => ‘get’ do %>
    People named:
    <%= text_field_tag ‘search’,@search %>
    <%= submit_tag ‘Find’ %>
    <% end %>

 

app/controllers/peoples_controller.rb

peoples_controller.rb에서 수정해야 할 메서드는 list가 아닌 index가 되겠습니다

주의할것은 11쪽 하단의 예제에서 사용되는 paginatation 플러그인(예제의 출력결과를 페이지 단위로 나눠주기 위해 사용되었던)이 사라졌다는 것(deprecated)입니다. 여기서는 레일스 2.0에서 권고하는 will_paginate 플러그인을 사용해보겠습니다.

  1. script/plugin install svn://errtheblog.com/svn/plugins/will_paginate

위와 같이 플러그인을 설치한후 index메서드에 아래 코드를 입력합니다.

(스캐폴드가 만들어준 코드인 @peoples = People.find(:all) 는 삭제)

  1. def index
  2.  @peoples = People.paginate :page => params[:id] , :per_page => 10
  3. …..

 

p12

12쪽의 코드는 아래와 같이 바뀝니다

  1.   def index
    @search = params[:search]
    if @search.blank?
    @peoples = People.paginate :page => params[:id] , :per_page =>10
    else
    query = [‘first_name=? or last_name=?’,@search,@search]
    @peoples = People.paginate :page => params[:id] , :per_page =>10  , :conditions=>query

    end

    respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @peoples }
    end
    end

 

뷰 파일이름의 변경

6장 , 240쪽의 ‘멀티 뷰’ 보충설명에 언급된 대로 레일스 2.0에서는 뷰파일의 이름이 변경되었습니다

기본타입은 .html.erb 형식입니다. 스캐폴드를 생성하면

  • edit.html.erb
  • index.html.erb
  • new.html.erb
  • show.html.erb

위 네개의 뷰 파일이 기본적으로 생성됩니다.

15분만에 만드는 레일스 애플리케이션 예제를 레일스 2.0에서 실행하는 순서
  1. rails people -d mysql (레일스 애플리케이션 생성. 기본구조가 생성됩니다)
    1. (레일스 2.0의 기본 데이터베이스는 sqlite3이므로, mysql 사용시엔 데이터베이스 어댑터를 명시합니다)
  2. cd people
  3. script/generate scaffold Person (스캐폴드 코드 자동 생성)
    1. script/generate scaffold Person first_name:string last_name:string (이렇게 추가될 필드를 스캐폴드 생성시에 명시해주면 p6의 create_people.rb 파일의 수정 단계가 필요없습니다. 여기서 생성된 결과는 책과 조금 다른데, 이는 4장, 134쪽의 섹시한 마이그레이션에 대한 보충설명에 언급되어 있습니다)
  4. rake db:migrate (DB 마이그레이션)
  5. script/server (서버 실행)
  6. http://localhost:3000/peoples 에 접속해서 결과 확인
다이나믹 스캐폴드는 어디로?

레일스 2.0에서는 종래의 Dynamic Scaffold라 불리우던 것이 사라졌습니다. 아래 플러그인(ActiveScaffold)을 설치하면 기존처럼 사용하실 수 있습니다.

  1. script/plugin install scaffolding

 

 

4장

업데이트 중