Что такое "response_to" и "do" и "| format |" в этом коде Rails?

class PostsController < ApplicationController
  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end
...
  • Что именно такое "response_to"? часть рельсов?
  • Что такое "делать" и "| формат |"? Почему существуют вертикальные разделители вокруг формата?
  • Как же Rails узнает о модели Post? Я не импортировал эту модель. (В Python/Django вы должны импортировать модель, прежде чем сможете ее использовать)

Это из учебника по Ruby on Rails: http://edgeguides.rubyonrails.org/getting_started.html#setting-the-application-home-page

Ответ 1

respond_to - это метод, специфичный для рельсов, который определяет, как реагировать на запросы для различных форматов (таких как xml и html). do и |format| очерчивают блок ruby, при этом do действует как открытая скобка, а end как закрывающая скобка, а |format| определяет переменную блока, которая получает свое значение из оператора yield внутри responds_to.

Ответ 2

"do" - это блок RUBY, а "| format |" может быть чем угодно, это просто переменная для использования внутри этого блока, вот еще один пример:

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

Ответ 3