<div class="warning"> 이 글은 "웹 개발 2.0 루비 온 레일스" 를 공부하면서 개인적으로 정리한 내용입니다. 상세한 내용을 보고자 하시는 분은 책을 구매하시길 바랍니다. </div>

Rails 프로그래밍#

  • 모델 클래스 생성

ruby script/generate model Person

  • 컨트롤러 클래스 생성

ruby script/generate controller Phonebook

  • 스캐폴링 기능으로 기본적인 CRUD작업 수행하기

class PhonebookController < ApplicationController
  scaffold :person
end

  • 모델 클래스 변경

class Group < ActiveRecord::Base
  has_many :people <- 복수형으로 표기
end

class Person < ActiveRecord::Base
  belongs_to :group <- 단수형으로 표기
end

  • 컨트롤러 클래스 생성(그룹)

ruby script/generate controller Groups

  • 스캐폴링 기능으로 기본적인 CRUD작업 수행하기

class GroupsController < ApplicationController
  scaffold :group
end

class PhonebookController < ApplicationController
  def list
    #    render_text("hello!")      # 화면에 문자열을 출력
    @people = Person.find(:all)  # 모든 목록을 가져옴
  end
  def new
    @person = Person.new        # 새로운 Person객체 생성
    @groups = Group.find(:all)   # 그룹 목록을 가져옴
  end
  def create
    @person = Person.new(params[:person]) # 화면에서 넘긴 값으로 새로운 Person객체를 생성
    @person.save                    # 앞서 만든 Person객체를 실제로 저장
    redirect_to(:action=>"list")   # 페이지 리다이렉트
  end
  def show
    @person = Person.find(params[:id])    # 넘어온 id값에 해당되는 Person객체를 가져옴
  end
  def edit
    @person = Person.find(params[:id])    # 넘어온 id값에 해당되는 Person객체를 가져옴
    @groups = Group.find(:all)                # 그룹 목록을 가져옴
  end
  def update
    @person = Person.find(params[:id])    # 넘어온 id값에 해당되는 Person객체를 가져옴
    @person.update_attribute(params[:person]) # Person의 값을 변경
    redirect_to(:action=>"show", id=>@person# 페이지 리다이렉트
  end
  def destroy
    @person = Person.find(params[:id])    # 넘어온 id값에 해당되는 Person객체를 가져옴
    @person.destroy                             # Person 삭제
    redirect_to(:action=>"list")                # 페이지 리다이렉트
  end
end

<div class="information"> 여기서 주의할점은 해당 함수내에서 redirect를 하지 않는다면 함수명.rhtml로 응답을 넘긴다. </div>

  • 스캐폴딩 기능을 사용하지 않고 위처럼 임의 로직으로 처리할 경우 처리할 웹페이지를 만들어주어야 한다. app/view/phonebook/함수명.rhtml 여기서는 list.rhtml

<html>
<head>
  <title>웹 전화번호부</title> 
</head>

<body>
  <h3>웹 전화번호부</h3>
  <ol>
    <% for p in @people %>
    <li>
  <%= link_to(p.name, :action=>"show", :id=>p%>
  [<%= p.group.name %>]:
  <%= p.phone_number %>
    </li>
    <% end %>
  </ol>
  <p><%= link_to("사람추가", :action=>"new"%></p>
</body>
</html>

  • new.rhtml

<html>
<head>
  <title>웹 전화번호부</title>
</head>

<body>
<h3>사람 추가</h3>

<% form_for(:person, :url => {:action => "create"}) do |f| %>
<table>
  <tr>
    <td>그룹</td>
    <td>
  <%= f.select("group_id"@groups.map {|g| [g.name, g.id]}) %>
    </td>
  </tr>
  <tr>
    <td>이름</td>
    <td><%= f.text_field("name"%></td>
  </tr>
  <tr>
    <td>전화번호</td>
    <td><%= f.text_field("phone_number"%></td>
  </tr>
  <tr>
    <td>노트</td>
    <td><%= f.text_area("note"%></td>
  </tr>
  <tr>
    <td></td>
    <td><%= submit_tag("입력"%></td>
  </tr>
</table>
<% end %>
<div><%= link_to("돌아가기", :action => "list"%></div>
</body>
</html>

  • show.rhtml

<html>
<head>
  <title>웹 전화번호부</title>
</head>

<body>
<h3>상세 정보</h3>
<table>
  <tr>
    <td>그룹:</td>
    <td><%= @person.group.name %></td>
  </tr>
  <tr>
    <td>이름:</td>
    <td><%= @person.name %></td>
  </tr>
  <tr>
    <td>전화번호:</td>
    <td><%= @person.phone_number %></td>
  </tr>
  <tr>
    <td>노트:</td>
    <td><%= @person.note %></td>
  </tr>
  <tr>
    <td></td>
    <td>
  <%= link_to("수정", :action => "edit", :id => @person%>
  <%= link_to("삭제",
  {:action => "destroy", :id => @person},
  :confirm => "정말로 삭제하시겠습니까?"%>
    </td>
  </tr>
</table>
<p><%= link_to("돌아가기", :action => "list"%></p>
</body>
</html>

  • edit.rhtml

<html>
<head>
  <title>웹 전화번호부</title>
</head>

<body>
<h3>정보 수정</h3>
<% form_for(:person, :url => {:action => "update",:id => @person}) do |f| %>
<table>
  <tr>
    <td>그룹</td>
    <td>
  <%= f.select("group_id",
   @groups.map {|g| [g.name, g.id]}) %>
    </td>
  </tr>
  <tr>
    <td>이름</td>
    <td><%= f.text_field("name"%></td>
  </tr>
  <tr>
    <td>전화번호</td>
    <td><%= f.text_field("phone_number"%></td>
  </tr>
  <tr>
    <td>노트</td>
    <td><%= f.text_area("note"%></td>
  </tr>
  <tr>
    <td></td>
    <td><%= submit_tag("입력"%></td>
  </tr>
</table>
<% end %>
<p><%= link_to("돌아가기",
   :action => "show", :id => @person%></p>
</body>
</html>

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-2) was last changed on 17-Jul-2007 17:12 by DongGukLee