Rendering in Rails
6817 단어 JavaScriptmvcjsonRubyRails
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)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.