Rendering in Rails

참조 링크: http://guides.rubyonrails.org/layouts_and_rendering.html
render
action 에서 render, redirect 를 호출 하지 않 았 다 면to, head 와 methodmissing 방법 중 하나 입 니 다. rails 는 현재 action 이름과 대응 하 는 템 플 릿 을 기본적으로 렌 더 링 합 니 다.예 를 들 어 Books Controller 에 이런 코드 가 있 습 니 다.
def show
  @book = Book.find(params[:id])
end

rails 는 show 방법 을 실행 한 후 app / views / books / show. html. erb 템 플 릿 을 렌 더 링 합 니 다.
인용 하 다.
If you want to see the exact results of a call to render without needing to inspect it in a browser, you can call
render_to_string. This method takes exactly the same options as render, but it returns a string instead of sending a response back to the browser.
브 라 우 저 에 빈 응답 정 보 를 보 내 려 면 사용 할 수 있 습 니 다.
: nothing 옵션:
render :nothing=>true

render 의 첫 번 째 매개 변 수 는 string 이나 symbol 이 라면 rails 는 같은 contrller 의 특정한 action 에 대응 하 는 템 플 릿 을 렌 더 링 합 니 다. 예 를 들 어:
def update
 @book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
   redirect_to(@book)
  else
   render "edit" #OR render :edit
  end
 end
end 

위의 코드 는 @ book. update 에 있 습 니 다.attributes 방법 이 false 로 돌아 갈 때 이 controller 에서 edit 라 는 action 에 대응 하 는 템 플 릿 을 렌 더 링 합 니 다.아래 코드 는 같은 효과 가 있 습 니 다. 다만 Rails 2.3 에서 이렇게 귀 찮 게 쓸 필요 가 없습니다.
def update
 @book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
   redirect_to(@book)
  else
   render :action=>'edit'
  end
 end
end 

다른 controller 템 플 릿 을 렌 더 링 하려 면 render 방법의 매개 변수 에서 그 템 플 릿 의 경 로 를 직접 지정 할 수 있 습 니 다 (app / views 의 상대 경로 에 비해). 예 를 들 어 app / controllers / admin 의 Admin Products Controller 에서 app / views / products / show. html. erb 템 플 릿 을 렌 더 링 하려 면 render 를 이렇게 호출 할 수 있 습 니 다.
render 'products/show'

아래 코드 는 같은 효과 가 있 습 니 다. 다만 Rails 2.3 에서 이렇게 귀 찮 게 쓸 필요 가 없습니다.
render :template => 'products/show' 

다른 임의의 위치 에 있 는 템 플 릿 파일 도 렌 더 링 할 수 있 습 니 다. 예 를 들 어 특정한 상황 에서 두 rails 응용 프로그램 은 같은 템 플 릿 파일 을 공 유 했 습 니 다.
render "/u/apps/warehouse_app/current/app/views/products/show"

rails 는 매개 변수의 첫 번 째 문자 가 '/' 인지 에 따라 이것 이 file render 인지 아 닌 지 를 판단 합 니 다.
아래 코드 는 같은 효과 가 있 습 니 다. 다만 Rails 2.3 에서 이렇게 귀 찮 게 쓸 필요 가 없습니다.
render :file => "/u/apps/warehouse_app/current/app/views/products/show"

기본적으로 file render 는 현재 layot 를 사용 하지 않 습 니 다. 현재 layot 를 사용 하려 면: layot = > true 를 지정 해 야 합 니 다.
메모: rails 가 Microsoft Windows 에서 실행 된다 면: file 옵션 을 사용 하여 파일 을 렌 더 링 해 야 합 니 다. Windows 파일 이름 의 형식 이 유 닉 스 와 다 르 기 때 문 입 니 다.
: inline 옵션 을 사용 하면 erb 템 플 릿 이 아 닌 render 방법 으로 문자열 을 렌 더 링 할 수 있 습 니 다.
render :inline => "<% products.each do |p| %><p><%= p.name %><p><% end %>" 

inline 이라는 옵션 을 사용 할 이유 가 거의 없습니다. contrller 논리 에 ERB 코드 를 섞 어 Rails 의 MVC 원칙 을 위반 하고 다른 개발 자 들 이 프로그램 논 리 를 이해 하기 어렵 게 합 니 다.'논리' 와 '표현' 을 분리 한 erb 템 플 릿 으로 대체 하 는 것 이 좋 습 니 다: inline 옵션.
inline rendering 은 기본적으로 ERB 를 사용 합 니 다. type 옵션 을 지정 하여 Builder 를 사용 하도록 강제 할 수도 있 습 니 다.
render :inline => "xml.p {'Horrid coding practice!'}", :type => :builder

인용 하 다.
Using render with :update
You can also render javascript-based page updates inline using the :update option to render:
render :update do |page|
 page.replace_html 'warning', "Invalid options supplied" 
end

Placing javascript updates in your controller may seem to streamline small updates, but
it defeats the MVC orientation of Rails and will make it harder for other developers to follow the logic of your project. We recommend using a separate rjs template instead, no matter how small the update.
통과 하 다.
: text 옵션 을 사용 하면 브 라 우 저 에 텍스트 내용 을 보 낼 수 있 습 니 다.
render :text =>'hello'

인용 하 다.
Rendering pure text is most useful when you’re responding to AJAX or web service requests that are expecting something other than proper HTML.
file render 와 마찬가지 로 기본 값: text 옵션 은 현재 layot 를 사용 하지 않 습 니 다. 현재 layot 를 사용 하려 면: layot = > true 를 지정 해 야 합 니 다.
렌 더 링 json
아주 간단 합 니 다.
render :json=>@product

인용 하 다.
You don’t need to call to_json on the object that you want to render. If you use the :json option, render will automatically call to_json for you.
렌 더 링 xml
같은 json:
render :xml=>@product
뒤의 그 작은 영 어 는 인용 이 많 지 않 습 니 다. 똑 같 습 니 다.
Rendering Vanilla JavaScript
render :js => "alert('Hello Rails');"

Options for render
render 방법 은 4 개의 옵션 을 받 습 니 다:
:content_type
:layout
:status
:location
:content_type
인용 하 다.
By default, Rails will serve the results of a rendering operation with the MIME content-type of text/html (or application/json if you use the :json option, or application/xml for the : xml option.). There are times when you might like to change this, and you can do so by setting the :content_type option:
render :file => filename, :content_type => 'application/rss'

:layout
인용 하 다.
You can use the :layout option to tell Rails to use a specific file as the layout for the current action:
render :layout => 'special_layout'

You can also tell Rails to render with no layout at all:
render :layout => false 
:status
인용 하 다.
Rails will automatically generate a response with the correct HTML status code (in most cases, this is 200 OK). You can use the :status option to change this:
render :status => 500 render :status => :forbidden

Rails understands either numeric status codes or symbols for status codes. You can find its list of status codes in
actionpack/lib/action_controller/status_codes.rb. You can also see there how Rails maps symbols to status codes.
:location
인용 하 다.
You can use the :location option to set the HTTP Location header:
render :xml => photo, :location => photo_url(photo)

좋은 웹페이지 즐겨찾기