이 블로그 검색

레이블이 Ruby on Rails인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Ruby on Rails인 게시물을 표시합니다. 모든 게시물 표시

2012년 9월 3일 월요일

Ruby on Rails 간단 게시판 다시 만들어보기


예제 소스: https://github.com/jeremyko/RailsBoardSample/tree/moreRailsWay
참고한 문서 : http://ruby.railstutorial.org/ruby-on-rails-tutorial-book

앞서 예제를 좀더 수정해서 약간 더 개선시킨 소스이다. 추가된 부분은 다음과 같다.

1. RESTful routing
2. form_for , 모델을 폼과 연결
3. Partial 사용, 중복 제거
4. Validation check
5. bootstrap-sass

1. RESTful 제공

rails가 제공하는 resources 메서드 를 호출해서 RESTful한 route를 사용할수 있다.
route.rb 파일을 다음처럼 변경한다.

* route.rb
RailsBoard::Application.routes.draw do       
    root :to => 'my_rails_board_rows#index'
   
    #REST-style URI    
    resources :my_rails_board_rows
    
    #matchs...
    match '/listSpecificPageWork',  to: 'my_rails_board_rows#listSpecificPageWork'    
    match '/searchWithSubject',  to: 'my_rails_board_rows#searchWithSubject'    
    match '/EditViaPostReq',  to: 'my_rails_board_rows#EditViaPostReq'   
end

이렇게 한줄 추가함으로서 rails에서 처리가능한 route는 다음처럼 구성되게 된다.

< Table 1 RESTful URI >
# ------------------------------------------------------------------------------------
# request     URI                                       Action      Purpose
# ------------------------------------------------------------------------------------
# GET          /my_rails_board_rows             index    모든 게시물들 조회
# GET          /my_rails_board_rows/1          show     id 1의 게시물 조회
# GET          /my_rails_board_rows/new      new       새로운 게시물 작성을 위한 화면 보임
# POST        /my_rails_board_rows            create    새로운 게시물을 생성 처리
# GET          /my_rails_board_rows/1/edit   edit        id 1 게시물 수정을 위한 화면 보임
# PUT          /my_rails_board_rows/1          update   id 1 게시물 수정 작업 처리
# DELETE    /my_rails_board_rows/1          destroy  id 1 게시물 삭제 처리

게시물 CRUD 처리를 RESTful하게 처리하기 때문에, 이전 예제와 비교시 action이 간단해졌다. 또한 Rails는 url을 간단하게 표시할수 있게끔 helper를 같이 생성해주는데, resources :my_rails_board_rows 의 경우 다음과 같은 helper들이 생성된다.

    ------------------------------------------------------------------------------------
    helper                                            호출시 return 되는 값
    ------------------------------------------------------------------------------------
    my_rails_board_rows_path               /my_rails_board_rows
    new_my_rails_board_row_path          /my_rails_board_rows/new
    edit_my_rails_board_row_path(:id)    /my_rails_board_rows/:id/edit
    my_rails_board_row_path(:id)           /my_rails_board_rows/:id

RESTful 구현을 위해 컨트롤러를 작성해보자
resources 호출로  RSESTful한 접근을 설정한 경우, Rails 는 위에서 표시된 것처럼(예를 들어, my_rails_board_rows/new), 모델명을 기준으로 컨트롤러를 찾게 된다. 즉, my_rails_board_rows_controller.rb를 찾는데, 현재 이 파일이 없으므로 생성해줘야 한다.

2012년 8월 28일 화요일

Ruby on Rails 간단 게시판


(rails 에 관심있는 새내기에 의한, 새내기를 위한 글 입니다~~).

요즘 취미로 Ruby on Rails 에 대해 공부하고 있는데, 간단한 게시판 예제를 작성 해보자.

이 예제의 소스는 여기서 받을수 있다.
https://github.com/jeremyko/RailsBoardSample

여기서 만들 게시판은 앞서 spring, django 에서 예제로 만든것 과 동일한 기능의 게시판이다. 간단한 기능을 가진 게시판이라서, Rails가 제공해주는 scaffolding 을 사용하면 10분 이내로도 작성이 가능할 수 있지만, 이 예제에서는 scaffolding 을 사용하지 않고 처음부터 작성하는것으로 한다. 그리고 Rails 에서 가능한 여러 기능들 즉, RSpec을 사용한 BDD, REST지원, validation check, coffee script, 뷰에서의 partial 등은 일단 간단 게시판을 먼저 작성한후, 향후 포스팅을 통해서 점차 적용시켜보도록 할것이다.

rails와 ruby 개발 환경은 완료된 상태라고 가정한다.
이 예제에서의 사용된 개발환경은 다음과 같다.
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Rails 3.2.8

그리고 사용할 DB는 기본 Sqlite 로 하기로 한다.
만약, Oracle 사용시에는 그에 따른 약간의 소스 코드 수정이 필요한데, 그것은 주석으로 표시하였다.

2012년 8월 14일 화요일

Windows 에서 Ruby on Rails (RoR) 3.2.8 + Oracle XE 11g



RoR 은 기본적으로 Sqlite 를 Database로 제공해주고 있다. 나는 Oracle XE를 개발용으로 사용중이라서, 여기에 맞춰서 설정을 해보기로 했다. 개발 환경은 다음과 같다.

Ruby 1.9.3
RoR  3.2.8
Oracle XE 11g

1. RoR 설치

설치 관련해서는 이미 많은 글들이 존재하므로 다시 내가 뭘 다시 써야할 내용은 없을 것 같다. 간단하게 말해보면, 먼저 Ruby를 설치하고 (http://rubyinstaller.org/downloads/), 이때 Windows 에서 gem 설치를 위해서 DevKit도 같이 다운로드 해서 설치한다. 그리고 명령 프롬프트 상에서 다음을 실행해서 RoR을 설치한다.
  gem install rails
DevKit설치는 다운받아 압축을 푼 디렉토리 내에서 다음을 수행한다.
  ruby dk.rb init
  ruby dk.rb install
(https://github.com/oneclick/rubyinstaller/wiki/Development-Kit 을 참조)

아니면, 간단하게 http://railsinstaller.org/ 에서 통합 패키지를 다운로드 받아서 설치할수도 있다.