튜토리얼1 - [멘토:강문식, 유지만] Ruby반 - 세미나룸#4
- 최종참가자: 10명 - 날개, 김성안, 브루펜시럽, 우주, 트위니, Celeste, Dano, iron, Raven, 이두원
링크
문서
소스
목표 :
ActiveRecord 를 사용하지 않고 ActiveRecord 의 REST 버젼이라고 할 수 있는 ActiveResource 만을 사용해서 스프링노트의 페이지를 다룰 수 있는 게시판을 만들어 본다.
Edge Rails 란 레일스 최신 개발소스를 의미함.
(참고) vendor/rails 디렉토리에 최신의 레일스 소스를 내려받으면 Edge 로 개발하는 환경이 갖추어 진다.
vendor/rails/railties/lib/initializer.rb 에 아래와 같은 메소드가 존재.
def framework_root_path
defined?(::RAILS_FRAMEWORK_ROOT) ? ::RAILS_FRAMEWORK_ROOT : "#{root_path}/vendor/rails"
end
인증키 받기 : 도움말 참조
config/springnote.yml 파일 생성후 아래와 같은 정보 추가.
springnote:
open_id: 자신의오픈아이디
user_key: 인증센타를통해받은유저키
app_key: 인증센타를통해받은어플리케이션키
ActiveRecord 를 사용하지 않도록 설정
필수 세션 정의 필요
스프링노트 API 인증에 필요한 설정 파일 내용 로딩 (springnote.yml)
(참고 : 개발환경에서 상세하게 에러메시지를 남기도록 설정) : config/environmants/development.rb 파일내용중 아래와 같이 수정
lib/initializer.rb 작성
config/environment.rb 파일에 monkey_patch 한 라이브러리 파일 로딩하도록 수정
app/conteollers/page_controller.rb 에서 update 부분을 수정하면 됨.
# ActiveResource 에는 update_attributes 가 구현이 안되어있다. 때문에 아래와 같이 수정하고 명시적으로 save 를 호출해주면 됨.
def update
@page = Page.find(params[:id])
respond_to do |format|
params[:page][:identifier] = params[:id]
if @page.attributes = params[:page]
@page.save
flash[:notice] = 'Page was successfully updated.'
format.html { redirect_to(@page) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @page.errors, :status => :unprocessable_entity }
end
end
end
개발환경 레일스 콘솔 실행 : script/console
콘솔상에서 아래와 같이 한줄씩 입력해보고 나오는 결과를 참고해보자.
200 - 399:: Valid response, no exception
404:: ActiveResource::ResourceNotFound
409:: ActiveResource::ResourceConflict
422:: ActiveResource::ResourceInvalid (rescued by save as validation errors)
401 - 499:: ActiveResource::ClientError
500 - 599:: ActiveResource::ServerError
| HTTP Verb | REST-URL | Action | URL without REST |
|---|---|---|---|
| GET | /projects/1 | show | GET /projects/show/1 |
| DELETE | /projects/1 | destroy | GET /projects/destroy/1 |
| PUT | /projects/1 | update | POST /projects/update/1 |
| POST | /projects | create | POST /projects/create |
| Path Method | HTTP Verb | Path | Requested Action |
|---|---|---|---|
| projects_path | GET | /projects | index |
| projects_path(1) | GET | /projects/1 | show |
| new_project_path | GET | /projects/new | new |
| edit_project_path | GET | /projects/1;edit | edit |
| projects_path | POST | /projects | create |
| projects_path(1) | PUT | /projects/1 | update |
| projects_path(1) | DELETE | /projects/1 | destroy |
config/routes.rb :
map.resources :projects
| Route | Generated Helper |
|---|---|
| projects | projects_url, projects_path |
| project | project_url(id), project_path(id) |
| new_project | new_project_url, new_project_path |
| edit_project | edit_project_url(id), edit_ |
이 글은 스프링노트에서 작성되었습니다.