복붙노트

[RUBY-ON-RAILS] 레일 다음 respond_to 블록 작업을 수행하는 방법?

RUBY-ON-RAILS

레일 다음 respond_to 블록 작업을 수행하는 방법?

나는이 레일 가이드 시작하기를 통해 갈거야 및 6.7와 혼동되었다. 비계를 생성 한 후 나는 내 컨트롤러에서 다음 자동 생성 된 블록을 찾을 수 있습니다 :

def index
  @posts = Post.all

  respond_to do |format|
    format.html  # index.html.erb
    format.json  { render :json => @posts }
  end
end

나는 respond_to 블록은 실제로 작동 않는 방법을 이해하고 싶습니다. 형식은 어떤 종류의 변수인가? 형식 개체의 .html 중에서 및 .json 방법이 있습니까? ActionController :: MimeResponds :: ClassMethods에 대한 문서 :: respond_to는 질문에 대답하지 않습니다.

해결법

  1. ==============================

    1.루비에 새로운 오전이 같은 코드에 붙어있어. 나는 전화를 끊었다있어하는 부분에 내가 여기에있는 몇 가지 답변보다 더 근본적인 조금 있었다. 이 또는 다른 사람을 도움이되지 않을 수 있습니다.

    루비에 새로운 오전이 같은 코드에 붙어있어. 나는 전화를 끊었다있어하는 부분에 내가 여기에있는 몇 가지 답변보다 더 근본적인 조금 있었다. 이 또는 다른 사람을 도움이되지 않을 수 있습니다.

    http://api.rubyonrails.org/v4.1/classes/ActionController/Responder.html

    http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html

    그것은 (JS 같은 의사 코드를 사용하여) 다음과 같이 쓸 수있다 :

    // get an instance to a responder from the base class
    var format = get_responder()
    
    // register html to render in the default way
    // (by way of the views and conventions)
    format.register('html')
    
    // register json as well. the argument to .json is the second
    // argument to method_missing ('json' is the first), which contains
    // optional ways to configure the response. In this case, serialize as json.
    format.register('json', renderOptions)
    

    이 부분은 저 지옥을 혼동. 나는 아직도 그것을 직관적 찾을 수 있습니다. 루비는이 기술을 상당히을 사용하는 것 같다. 반 전체 (응답자)에있어서 실장된다. 우리는 그들이하는 방법과 같은 개체를 전달되는 콜백을 통과 할 의무가있는, 그래서 활용 method_missing하기 위해, 우리는 클래스의 인스턴스가 필요합니다. 코딩 누군가를 들어 C-같은 20 몇 년 동안 언어, 이것은 매우 뒤로하고 직관적 나에게있다. 그것은 나쁜하지 않는 것이! 그러나 배경 필요의 종류 많은 사람들이 그것의 일이 주위에 그들의 머리를 얻기 위해, 그리고 나는 영업 이익은 후 무슨 수 있습니다 생각합니다.

    추신. RoR에 4.2 respond_to는 응답자 보석으로 추출하고 있습니다.

  2. ==============================

    2.이는 레일 헬퍼 메소드를 활용 루비 코드 블록이다. 아직 블록에 익숙하지 않은 경우, 당신은 그들에게 루비에서 많이 볼 수 있습니다.

    이는 레일 헬퍼 메소드를 활용 루비 코드 블록이다. 아직 블록에 익숙하지 않은 경우, 당신은 그들에게 루비에서 많이 볼 수 있습니다.

    respond_to 컨트롤러 클래스에 부착 (또는 오히려, 수퍼 클래스)되는 레일 헬퍼 메소드이다. 그것은 (브라우저로가는)보기로 전송됩니다 응답을 참조한다.

    블록에서 '포맷'파라미터를 전달하여 - - 당신의 예에서 블록 데이터를 포맷하는 브라우저가 HTML 또는 JSON 데이터에 대한 요청을 할 때마다 뷰 컨트롤러로부터 전송된다.

    // 로컬 호스트 : 3000 / 게시물 당신은 HTML 형식으로 모든 소식을 볼 것입니다 당신이 당신의 로컬 컴퓨터에 있고 당신이 당신의 포스트가 설정 비계가있는 경우, 당신은 HTTP에 갈 수 있습니다. HTTP :이 입력 할 경우에, // 로컬 호스트 : 3000 / posts.json을, 당신은 서버에서 전송 된 JSON 객체에서 모든 게시물을 볼 수 있습니다.

    이것은 필요가 앞뒤로 서버에서 JSON 전달하는 것을 자바 스크립트 무거운 응용 프로그램을 만들기위한 매우 편리합니다. 당신이 원하는 경우에, 당신은 쉽게 백엔드 당신의 레일에 JSON API를 만들 수 있습니다, 단 하나 개의보기를 통과 - 당신의 포스트 컨트롤러의 인덱스 뷰처럼. 그런 다음 데이터를 조작하고 자신의 인터페이스를 만들 JQuery와 또는 백본 (또는 둘 다)와 같은 자바 스크립트 라이브러리를 사용할 수 있습니다. 이러한 비동기 UI를라고 그들은 (Gmail의 하나입니다) 정말 인기 becomming된다. 그들은 매우 빠르다 및 최종 사용자에게 웹에 더 데스크탑과 같은 경험을 제공합니다. 물론,이 데이터 포맷의 하나의 장점이다.

    는이 될 것이라고 쓰기의 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
    

    HTML, : XML : respond_to으로 바꾸어 클래스의 상단에 JSON을, 당신은 당신이 컨트롤러가 귀하의 의견에 보내려고하는 모든 형식을 선언 할 수 있습니다.

    그런 다음 컨트롤러 방법, 당신이해야 할 모든 respond_with입니다 (@whatever_object_you_have)

    그냥 조금 더 자동 생성 어떻게 레일 이상의 코드를 단순화합니다.

    당신은 이것의 내부 - 동작에 대해 알고 싶다면 ...

    내가 이해에서, 레일은 실제 형식이 될 것입니다 어떤 결정하기 위해 개체를 내부적으로 점검. '포맷'변수 값이 반성에 기초한다. 레일은 정보의 조금으로 전체를 많이 할 수 있습니다. 포스트 갈 것입니다 : 당신은 간단한의 @post 또는 얼마나 놀랄 것입니다.

    나는 _user.html.erb 부분 파일이 있다면 예를 들어, 다음과 같이 보인다고 :

    _user.html.erb

    <li>    
        <%= link_to user.name, user %>
    </li>
    

    그런 다음 내 인덱스보기에서 혼자 레일은 '사용자의 모든 객체를 반복을가'사용자 '가 일부 발견 할 필요가 있음을 알고 할 것입니다 :

    index.html.erb

     <ul class="users">
       <%= render @users %>     
     </ul>
    

    레일은 '사용자의 모든 객체를 반복을이 부분'사용자 '를 발견 할 필요가 있음을 알고 할 것입니다 :

    당신은 도움이 블로그 게시물을 찾을 수 있습니다 : 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 : 당신은 또한 소스를 정독 할 수 있습니다

  3. ==============================

    3.당신은 모든 단일 컨트롤러에서 사용할 수 있도록 모두가 ActionController에서 상속 때문에 내가 아는 바로는, respond_to는의 ActionController에 부착하는 방법입니다. 여기에 레일 respond_to 방법은 다음과 같다 :

    당신은 모든 단일 컨트롤러에서 사용할 수 있도록 모두가 ActionController에서 상속 때문에 내가 아는 바로는, respond_to는의 ActionController에 부착하는 방법입니다. 여기에 레일 respond_to 방법은 다음과 같다 :

    def respond_to(&block)
      responder = Responder.new(self)
      block.call(responder)
      responder.respond
    end
    

    내가 여기에 보여처럼 당신은 그것을 블록을 통과하고 있습니다 :

    respond_to <<**BEGINNING OF THE BLOCK**>> do |format|
      format.html
      format.xml  { render :xml => @whatever }
    end <<**END OF THE BLOCK**>>
    

    | 형식 | 일부는 우리가 그것을 사용할 수있는 respond_to 방법 내부 있도록 블록이 기대하는 인수입니다. 어떻게?

    당신은 우리가 접두사 &의 respond_to 방법으로 블록을 통과 통지하고, 글쎄, 우리는 PROC로 그 블록을 치료하기 위해 그렇게. 인수가 ".XML"을 가지고 있기 때문에 메소드가 호출 될로서, ".html 중에서"우리가 사용할 수 있습니다.

    우리가 기본적으로 respond_to 클래스에서 할 것은 응답자 클래스의 인스턴스에 대한 호출 방법 ".html 중에서, .XML, .json"입니다.

  4. ==============================

    4.형식이 무엇인지 이해하기 위해서는, 먼저 respond_to의 소스에서 볼 수 있지만, 빨리 당신은 당신이 볼 필요가 정말 무엇을 retrieve_response_from_mimes의 코드는 것을 확인할 수 있습니다.

    형식이 무엇인지 이해하기 위해서는, 먼저 respond_to의 소스에서 볼 수 있지만, 빨리 당신은 당신이 볼 필요가 정말 무엇을 retrieve_response_from_mimes의 코드는 것을 확인할 수 있습니다.

    여기에서, 당신은 (코드에) respond_to에 전달 된 블록이, 실제로 전화를 (블록 내에서 형식으로 참조) 수집기의 인스턴스로 전달되는 것을 볼 수 있습니다. 콜렉터는 기본적 대해 무엇을 알고 마임 유형의 레일에 따라 (I 레일은 시작시 믿는다) 메소드를 생성합니다.

    그래서, 예, .html 중에서 및 .json 클래스 (형식 일명) 수집기에 (실행시) 정의 방법이 있습니다.

  5. ==============================

    5.응답자 등록 (마른 오징어의 답변을 참조) 뒤에 메타 프로그래밍도이 같은 멋진 물건을 수행 할 수 있습니다 :

    응답자 등록 (마른 오징어의 답변을 참조) 뒤에 메타 프로그래밍도이 같은 멋진 물건을 수행 할 수 있습니다 :

    def index
      @posts = Post.all
    
      respond_to do |format|
        format.html  # index.html.erb
        format.json  { render :json => @posts }
        format.csv   { render :csv => @posts }
        format.js
      end
    end
    

    csv로 라인은 /posts.csv 방문 할 때 각 게시물에 호출 할 to_csv의 원인이됩니다. 이것은 당신의 레일 사이트에서 CSV (또는 다른 형식) 등의 수출 데이터에 쉽게이를 수 있습니다.

    JS 라인은 자바 스크립트 파일 /posts.js (또는 /posts.js.coffee)가 실행 / 렌더링되게한다. 나는 아약스 jQuery를 UI 팝업을 사용하여 사이트를 활성화 만들 수있는 경량의 방법이 될 것으로 나타났습니다.

  6. ==============================

    6.자바 POV에서, 형식은 익명 인터페이스의 implemtation입니다. 이 인터페이스는 각 MIME 타입의 이름을 딴 하나의 방법이있다. 하면 (그것을 블록을 통과하는) 그 방법 중 하나를 호출하면, 사용자가 해당 콘텐츠 형식을 원한다고 레일 Feel로는, 그것은 당신의 블록을 호출합니다 다음 경우.

    자바 POV에서, 형식은 익명 인터페이스의 implemtation입니다. 이 인터페이스는 각 MIME 타입의 이름을 딴 하나의 방법이있다. 하면 (그것을 블록을 통과하는) 그 방법 중 하나를 호출하면, 사용자가 해당 콘텐츠 형식을 원한다고 레일 Feel로는, 그것은 당신의 블록을 호출합니다 다음 경우.

    트위스트는 물론, 익명 접착제 객체가 실제로 인터페이스를 구현하지 않는다는 것입니다 -이 방법은 동적으로 호출하고 MIME 타입의 그 이름이 그것에 대해 알고 있는지 작동 잡는다.

    개인적으로, 나는 그것이 이상한 보이는 생각 : 당신이 통과하는 블록이 실행됩니다. 그것은 형식 라벨 및 블록의 해시를 전달하기 위해 나에게 더 의미가있다. 그러나 - 그것의 RoR에서 수행 방법의 것을 보인다.

  7. ==============================

    7.라이언 Bigg는 여기를 설명하는 훌륭한 일을 수행함으로써이 조금 구식입니다 :

    라이언 Bigg는 여기를 설명하는 훌륭한 일을 수행함으로써이 조금 구식입니다 :

    http://ryanbigg.com/2009/04/how-rails-works-2-mime-types-respond_to

    사실, 당신이 찾고 있던 것보다 조금 더 상세하게 될 수 있습니다. 그것이 나오는 것에 따라, 많은 MIME 형식이로드되는 방법을 이해 할 필요를 포함, 무대 뒤에서 벌어지고있다.

  8. ==============================

    8."형식"응답 유형입니다. 예를 들어, JSON 또는 HTML이 될 수 있습니다. 그것은 당신의 방문자가받을 출력 형식입니다.

    "형식"응답 유형입니다. 예를 들어, JSON 또는 HTML이 될 수 있습니다. 그것은 당신의 방문자가받을 출력 형식입니다.

  9. ==============================

    9.MIME - 당신이 알아야 할 한 가지 더있다.

    MIME - 당신이 알아야 할 한 가지 더있다.

    당신이 MIME 타입을 사용할 필요가 있으며 기본적으로 지원되지 않는 경우, 당신은 설정 / 초기화 / mime_types.rb에 자신의 핸들러를 등록 할 수 있습니다 :

    마임 :: Type.register "텍스트 / 인하": 인하

  10. from https://stackoverflow.com/questions/9492362/rails-how-does-the-respond-to-block-work by cc-by-sa and MIT license