Upload
sangyong-sim
View
204
Download
6
Embed Size (px)
Citation preview
Layout and Rendering
Rendering in Rails
사용자의 요청에 대한 응답을 생성하는 것
응답을 돌려주는 3가지 방법
1. head
본문이 필요 없는 경우
head :bad_request
2. redirect_to
HTTP Redirection
redirect_to action: :index
3. render
본문을 생성할 수 있는 유일한 방법
CoC
- 컨트롤러의 액션은 자신과 매칭되는 뷰의 경로를 알고 있다.
controller#action => app/views/controller/action.*.*
- 요청받은 포맷에 따라서, 그에 알맞는 템플릿을 사용한다.
html => view.html.erbjson => view.json.jbuilderxml => view.xml.builder
- One Action, One Rendering
if @model.save redirect_to @bookendrender :new
- One Action, One Rendering
if @model.save redirect_to @bookendrender :new
- One Action, One Rendering
if @model.save redirect_to @book and returnendrender :new
render를 호출하는 다양한 방법
render :editrender action: :editrender "edit"render "edit.html.erb"render action: "edit"render action: "edit.html.erb"render "books/edit"render "books/edit.html.erb"render template: "books/edit"render template: "books/edit.html.erb"render "/path/to/rails/app/views/books/edit"render "/path/to/rails/app/views/books/edit.html.erb"render file: "/path/to/rails/app/views/books/edit"render file: "/path/to/rails/app/views/books/edit.html.erb"render plain: "Text"render json: @modelrender xml: @model
Layout In Rails
템플릿을 감싸는 코드
일반 템플릿이 사진이라면, 레이아웃은 사진을 끼울 액자 틀
CoC
- 레이아웃은 컨트롤러 별로
ApplicationController 를 위한 레이아웃 -> views/layouts/application.html.erb
- 상속 가능
application.html.erb 이 기본 레이아웃으로 사용되는 이유
- 다양한 호출 방식에 따른 우선 순위
app/views/layouts/application (기본)app/views/layouts/controllercontroller의 layout 선언render layout: "old"
app/views/layouts/application (기본)app/views/layouts/controllercontroller의 layout 선언render layout: "old"
파일명 또는 함수명, 또는 block 가능조건부 레이아웃(except:, only:) 가능
Partial View
템플릿 파일에서 호출하는 템플릿
뷰를 Dry하게 만들고 싶을때 사용 가능 ex) form refactoring
CoC
- 파일명을 ‘_’로 시작할 것. 호출할 때에는 ‘_’ 없이 호출.
‘_form’ -> render ‘form’
And…
- 뷰에서 호출하는 render는 파셜을 사용 - 파셜에도 레이아웃을 사용 가능 - 지역 변수를 넘겨줄 수 있음 - Collection Partial, Spacer Templates…
yield & content_for
yield in layout -> 액션의 기본 템플릿을 출력
yield :symbol 템플릿에 있는 content_for :symbol 블럭을 출력
… yield … yield :nest_layout …
… content_for :nest_layout do … end
layout.html.erb
view.html.erb
content_for 영역을 제외한 view.html.erb가 출력
Asset Helper
외부 컨텐츠 링크를 생성할 경우에 사용
auto_discovery_link_tag javascript_include_tag stylesheet_link_tag image_tag video_tag audio_tag
상대경로 사용 시 - “app” 절대경로 사용시
- “http://…”
상대 경로 사용시 경로로 ‘/assets/~~’ 를 사용하는 태그가 생성되며, 이 링크는 아래의 경로로 라우팅
- app/assets - lib/assets - vendor/assets
더 자세한 설명은 Rails Guide나 Rails API 를 참조해주세요.
Q & A
- END -