예제 소스:
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를 찾는데, 현재 이 파일이 없으므로 생성해줘야 한다.