这是生成的默认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
返回保存在其中的所有帖子的数组
实例变量@posts respond_to
函数采用默认值
&#39;块&#39; (一个带有一个参数的匿名功能块
&#39;格式&#39; 我不明白:
html
对象的函数format
方法。 html
方法有什么作用?为什么每次调用这两种方法?是吗?json
方法需要一个参数(调用render的块),但html
方法不需要任何参数json
方法的返回值。我是ruby和rails的新手,我开始使用示例,并希望详细了解每行的内容。
答案 0 :(得分:2)
format
上调用的方法告诉Rails响应类型可用。在上面的例子中,Rails被告知2个可接受的响应类型(按首选顺序)是html和json。
然后Rails根据给定的首选顺序和请求的标题选择响应类型。做出该选择后,将调用与所选格式对应的块。在此之前,尚未调用传递给格式方法的块 - 只需在需要响应类型时保存。
如果响应类型没有阻止,则表示应采用该响应类型的默认操作。在'html'的情况下,这意味着“找到一个html模板并渲染它”,类似于在动作结束时发生的隐式渲染。
ruby中的所有方法都有一个返回值,但是这个方法的返回值没有被记录为特别是 - 不要依赖它。
答案 1 :(得分:0)
评论中的答案(Rails: How does the respond_to block work?)是基本级解释所需要的。
源代码(我想?)可以在这里找到: /lib/action_controller/metal/mime_responds.rb
最后一行是respond_to
阻止您发送到应用的MIME (Multipurpose Internet Mail Extensions) types。
这是您希望从特定资源加载的 media 类型的表示,因此,您应该将其作为开发人员返回。
Rails'respond_to
格式化程序允许您执行此操作:
这就是说,“如果客户希望
HTML
对此作出回应 行动,只是像我们以前一样回应,但如果客户想要的话XML
,以XML格式返回人员列表。“(Rails确定 来自HTTP Accept
标题的所需响应格式 客户。)
虽然mimes用于任何类型的“媒体”,但Rails的范围主要扩展到请求类型 - IE JS
/ JSON
等,最常见于{{3} AJAX请求。
使用案例
关于函数如何在 rails 中运行,您需要了解每次向应用程序发送请求时,它都会以某种方式格式化 。
大多数请求都是标准HTML,但有时需要返回JS
或JSON
个请求。这些用例可以是API或content/type
header:
个请求通过XML
或JSON
发送 - 这通常表示控制器操作中的不同方法。虽然并非总是如此,但它通常使您能够根据您调用的请求类型定义特定功能。
Ajax类在控制器中处理此问题:
request.xhr?
-
关于如何这在技术上有效,你最好看Rack:Request
。我知道如果我向Rails发送JSON
请求,我也可以在JSON
中格式化回复。
Rails采用MIME类型并相应地做出响应。