이것은 Rails 헬퍼 메소드를 이용하는 Ruby 코드 블록입니다. 아직 블록에 익숙하지 않다면 Ruby에서 블록을 많이 볼 수 있습니다.
respond_toController 클래스 (또는 그 슈퍼 클래스)에 첨부 된 Rails 헬퍼 메소드입니다. View로 전송 될 응답 (브라우저로 이동)을 참조합니다.
귀하의 예제에서 블록은 브라우저가 html 또는 json 데이터를 요청할 때마다 컨트롤러에서보기로 전송되도록 블록의 '형식'매개 변수를 전달하여 데이터를 형식화하는 것입니다.
로컬 컴퓨터에 있고 Post 비계를 설정 한 경우을 방문하여 http://localhost:3000/posts모든 게시물을 html 형식으로 볼 수 있습니다. 그러나 다음을 입력 http://localhost:3000/posts.json하면 서버에서 보낸 json 객체에 모든 게시물이 표시됩니다.
이것은 서버에서 json을 앞뒤로 전달 해야하는 자바 스크립트가 많은 응용 프로그램을 만드는 데 매우 편리합니다. 원하는 경우 레일 백엔드에 json API를 쉽게 만들고 Post 컨트롤러의 인덱스보기와 같은 하나의보기 만 전달할 수 있습니다. 그런 다음 Jquery 또는 Backbone (또는 둘 다) 과 같은 자바 스크립트 라이브러리를 사용하여 데이터를 조작하고 고유 한 인터페이스를 만들 수 있습니다. 이를 비동기 UI 라고하며 실제로 인기가 있습니다 (Gmail은 하나임). 그것들은 매우 빠르며 최종 사용자에게 웹상에서 더 데스크탑 같은 경험을 제공합니다. 물론 이것은 데이터 형식의 장점 중 하나 일뿐입니다.
Rails 3 작성 방법은 다음과 같습니다.
class PostsController < ApplicationController
# GET /posts
# GET /posts.xml
respond_to :html, :xml, :json
def index
@posts = Post.all
respond_with(@posts)
end
#
# All your other REST methods
#
end
놓음으로써 respond_to :html, :xml, :json클래스의 상단에, 당신은 당신이 컨트롤러가 귀하의 의견에 보내려고하는 모든 형식을 선언 할 수 있습니다.
그런 다음 컨트롤러 방법에서 respond_with (@whatever_object_you_have) 만하면됩니다.
Rails가 자동 생성하는 것보다 코드를 약간 단순화합니다.
이것의 내부 작동에 대해 알고 싶다면 ...
내가 이해 한 내용에서 Rails는 객체를 검사하여 실제 형식이 무엇인지 결정합니다. '형식'변수 값은이 내부 검사를 기반으로합니다. Rails는 약간의 정보만으로도 많은 것을 할 수 있습니다. 간단한 @post 또는 : post가 얼마나 멀리 갈지 놀랄 것입니다.
예를 들어 다음과 같은 _user.html.erb 부분 파일이있는 경우 :
_user.html.erb
<li>
<%= link_to user.name, user %>
</li>
그런 다음 인덱스 뷰에서 이것만으로 Rails에게 '사용자'부분을 찾고 모든 '사용자'객체를 반복해야한다는 것을 알 수 있습니다.
index.html.erb
<ul class="users">
<%= render @users %>
</ul>
Rails에게 'user'부분을 찾고 모든 'users'객체를 반복해야한다는 것을 알려줍니다.
이 블로그 게시물이 유용하다는 것을 알 수 있습니다 : http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with
https://github.com/rails/rails 소스를 살펴볼 수도 있습니다.