2012-02-02 6 views
0

루비와 레일의 새로운 기능.레일에 의해 생성 된 루비 소스 코드

ror 문서의 가이드에 따라 블로그 애플리케이션을 만듭니다. repond_to이 방법은

def show 
    @post = Post.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @post } 
    end 
    end 

, 다음과 같은 블록이 있습니다 (이되지 않는 이유는 무엇입니까?) : 나는 코드가 생성 볼 때

Howver, 나는 내가 exmpale 위해, 그들을 이해할 수없는 것을 발견 논의?

그러나 블록 내부의 코드는 무엇을 의미합니까?

 format.html # show.html.erb 
     format.json { render json: @post } 

format.html은 메소드 이름이나 다른 이름입니까?

어쨌든 { render json: @post }>?

+0

일부 [docs] (http://apidock.com/rails/ActionController/MimeResponds/respond_to)를 읽으려고 했습니까? –

+0

나는이 방법의 기능이 아니라 여기의 표현을 의미한다. – hguser

+0

기본적인 루비 교육이 필요합니다. 다른 루비 교육보다 빠릅니다. http://mislav.uniqpath.com/poignant-guide/ – muffinista

답변

1

respond_to 메서드는 요청한 형식으로 콘텐츠를 전달하는 데 도움이됩니다. 예를 들어, /posts/1.json을 호출하면 응답은 JSON 파일이됩니다. /posts/1.html 인 경우 응답은 HTML 페이지입니다. 확장 기능이 제공되지 않는 경우의 기본값은 HTML을 렌더링하는 것입니다.

format.json 방법은 그 연장을 요청할 때마다 JSON 요청에 대해 당신이 카운터를 증가하려는 경우 레일은, 예를 들어 같은, 무엇을해야하지만, HTML 요청, 당신은 할 수 없습니다 알려줍니다

format.json { 
    counter = counter + 1 
    render json: @post 
} 

format.json 메소드에 블록을 제공하지 않으면 Rails가 자동으로 내부를보고 show.json.erb 파일을 찾아 렌더링합니다. 제공된 메소드에서 render json: @post은 Rails가 파일을 찾는 대신 즉시 렌더링하도록 지시합니다.

+0

요청 유형 (json 또는 html)에 따라 다른 결과가 표시됨을 알았으므로이 구문을 이해할 수 없습니다. 그래서'format'은 여기에 객체입니까? 'format.json'은 메소드이고'{xx}'는 블록 타입의 인수입니까? 블록 내부에서'render'가 또 다른 메소드 이름이고'json : @ post'가 인수입니까? – hguser

+0

글쎄, 거기에 Rails.log.info를 놓아서 무슨 일이 일어나고 있는지 볼 수 있습니다 ... –

+0

@hguser, 당신이 요구하는 것이 무엇인지 방법과 그 경우의 논쟁에 대한 가정은 맞습니다. 'render json : @ post'는'render ({: json => @post})'와 동일합니다. –