`respond_to` 在 rails 中的功能如何运作?
How does `respond_to` function in rails work?
这是默认生成的 Rails 代码。我了解代码的作用(根据文档中的解释),但不了解代码的作用。
1 class PostsController < ApplicationController
2 # GET /posts
3 # GET /posts.json
4 def index
5 @posts = Post.all
6
7 respond_to do |format|
8 format.html # index.html.erb
9 format.json { render json: @posts }
10 end
11 end
我的理解:
Post.all
returns 保存在
实例变量@posts
respond_to
函数取默认值
'block'(带一个参数的匿名函数块
'format'
- 根据请求的格式,相应的输出是returned
不明白的地方:
- 这实际上是如何运作的?第 8 行调用
format
对象的函数 html
方法,无论传递何种格式。 html
方法有什么作用?为什么每次都调用这两种方法?是吗?
- 为什么
json
方法需要一个参数(调用渲染的块)而 html
方法不需要任何参数
- 这个功能return有什么用吗?看起来 return 是
json
方法的 return 值。
我是 ruby 和 rails 的新手,我刚开始使用示例,想详细了解每一行的作用。
在 format
上调用的方法告诉 Rails 响应类型可用。在上面的例子中,Rails 被告知 2 种可接受的响应类型(按偏好顺序)是 html 和 json。
Rails 然后根据给定的偏好顺序和请求的 headers 选择响应类型。做出该选择后,将调用与所选格式对应的块。在此之前,传递给格式方法的块还没有被调用 - 只是保存以防需要响应类型。
如果响应类型没有块,这意味着应该执行该响应类型的默认操作。在 'html' 的情况下,这意味着 "find an html template and render it",类似于在操作结束时发生的隐式渲染。
ruby 中的所有方法都有一个 return 值,但此方法的 return 值未记录为任何特定值 - 不要依赖它。
评论中的答案 (Rails: How does the respond_to block work?) 是您需要的基本解释。
源代码(我想?)可以在这里找到:
/lib/action_controller/metal/mime_responds.rb
最重要的是 respond_to
块交易与您发送到您的应用程序的 MIME (Multipurpose Internet Mail Extensions) types。
这是您要从特定资源加载的 media 类型的表示,因此,您应该寻找 return 作为开发者。
Rails' respond_to
格式化程序允许您这样做:
What that says is, “if the client wants HTML
in response to this
action, just respond as we would have before, but if the client wants
XML
, return them the list of people in XML format.” (Rails determines
the desired response format from the HTTP Accept
header submitted by
the client.)
尽管 mimes 用于任何类型的 "media",但 Rails' 的范围主要扩展到请求的类型 - IE JS
/JSON
等,最常见在 AJAX 个请求中的 content/type
header 中提到。
用例
关于函数在 rails 中的工作方式,您需要了解每次向您的应用程序发送请求时,都会 以某种方式格式化。
大多数请求都是标准的 HTML,但有时 JS
或 JSON
请求需要 returned。这些的用例可能是 API 或 asynchronous request:
Ajax 请求通过 XML
或 JSON
发送 - 这通常表示控制器操作中的不同方法。尽管并非总是如此,但它通常使您能够根据调用的请求类型定义特定功能。
Rack:Request
class 在控制器中处理这个:
request.xhr?
--
关于 这在技术上如何工作,您最好查看 answers in this question。我知道如果我向 Rails 发送 JSON
请求,我也可以在 JSON
中格式化回复。
Rails 采用 MIME 类型并做出相应响应。
这是默认生成的 Rails 代码。我了解代码的作用(根据文档中的解释),但不了解代码的作用。
1 class PostsController < ApplicationController
2 # GET /posts
3 # GET /posts.json
4 def index
5 @posts = Post.all
6
7 respond_to do |format|
8 format.html # index.html.erb
9 format.json { render json: @posts }
10 end
11 end
我的理解:
Post.all
returns 保存在 实例变量@postsrespond_to
函数取默认值 'block'(带一个参数的匿名函数块 'format'- 根据请求的格式,相应的输出是returned
不明白的地方:
- 这实际上是如何运作的?第 8 行调用
format
对象的函数html
方法,无论传递何种格式。html
方法有什么作用?为什么每次都调用这两种方法?是吗? - 为什么
json
方法需要一个参数(调用渲染的块)而html
方法不需要任何参数 - 这个功能return有什么用吗?看起来 return 是
json
方法的 return 值。
我是 ruby 和 rails 的新手,我刚开始使用示例,想详细了解每一行的作用。
在 format
上调用的方法告诉 Rails 响应类型可用。在上面的例子中,Rails 被告知 2 种可接受的响应类型(按偏好顺序)是 html 和 json。
Rails 然后根据给定的偏好顺序和请求的 headers 选择响应类型。做出该选择后,将调用与所选格式对应的块。在此之前,传递给格式方法的块还没有被调用 - 只是保存以防需要响应类型。
如果响应类型没有块,这意味着应该执行该响应类型的默认操作。在 'html' 的情况下,这意味着 "find an html template and render it",类似于在操作结束时发生的隐式渲染。
ruby 中的所有方法都有一个 return 值,但此方法的 return 值未记录为任何特定值 - 不要依赖它。
评论中的答案 (Rails: How does the respond_to block work?) 是您需要的基本解释。
源代码(我想?)可以在这里找到: /lib/action_controller/metal/mime_responds.rb
最重要的是 respond_to
块交易与您发送到您的应用程序的 MIME (Multipurpose Internet Mail Extensions) types。
这是您要从特定资源加载的 media 类型的表示,因此,您应该寻找 return 作为开发者。
Rails' respond_to
格式化程序允许您这样做:
What that says is, “if the client wants
HTML
in response to this action, just respond as we would have before, but if the client wantsXML
, return them the list of people in XML format.” (Rails determines the desired response format from theHTTP Accept
header submitted by the client.)
尽管 mimes 用于任何类型的 "media",但 Rails' 的范围主要扩展到请求的类型 - IE JS
/JSON
等,最常见在 AJAX 个请求中的 content/type
header 中提到。
用例
关于函数在 rails 中的工作方式,您需要了解每次向您的应用程序发送请求时,都会 以某种方式格式化。
大多数请求都是标准的 HTML,但有时 JS
或 JSON
请求需要 returned。这些的用例可能是 API 或 asynchronous request:
Ajax 请求通过 XML
或 JSON
发送 - 这通常表示控制器操作中的不同方法。尽管并非总是如此,但它通常使您能够根据调用的请求类型定义特定功能。
Rack:Request
class 在控制器中处理这个:
request.xhr?
--
关于 这在技术上如何工作,您最好查看 answers in this question。我知道如果我向 Rails 发送 JSON
请求,我也可以在 JSON
中格式化回复。
Rails 采用 MIME 类型并做出相应响应。