3

我使用脚手架为帖子创建了一个 CRUD 系统。在控制器中,我看到了这个:

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

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end
  • 它是什么respond_to以及它来自哪里?由于它使用do运算符,因此我假设它是某种可迭代的列表。在该列表中的每一个format上,它将执行htmljson方法。

  • { render json: @posts }与该方法有关的工作如何json?是否render json: @posts作为参数传递给方法?renderjson每个都是对象吗?我从未见过在符号之外使用冒号表示法。

4

2 回答 2

3
  1. PostsController从ApplicationController继承方法,而ApplicationControllerActionController::Base继承。那是responds_to从哪里来的。值得研究的主题是“方法查找”。
  2. do ... end是编写块的一种方式。 { render json: @posts }是另一种方式。
  3. json: "foo"是比写作更现代的替代品:json => "foo"
  4. format是您要在块内使用的任意变量。render是一种方法,:json也是一种象征。respond_to将响应 Rails 相应格式化响应的用户请求。
  5. 为了理解该方法,还有这个:

http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

如果您想查看源代码(它有点厚),例如respond_withPaul 提到的方法,那在 Rails 源代码中:

rails/actionpack/lib/action_controller/metal/mime_responds.rb

于 2013-01-21T07:24:28.873 回答
1

首先,respond_to不是 Rails 中的现代东西。但无论如何我都会提供参考解释。

更现代的助手是respond_with

可能这个截屏视频对您有用。

于 2013-01-21T07:05:39.573 回答