0

生成这样的脚手架:

rails 生成脚手架用户名:字符串电子邮件:字符串

在控制器类中创建如下所示的代码:

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @user }
end

起初我不知道这是什么意思,所以我去寻找并找到了这个,我认为这足以解释其中的大部分内容。但是格式应该最终成为一个Responder 类。好吧,在 Responder 类中似乎没有声明任何 xml 或 html 或 json 成员。他们来自哪里?

PS:

脚手架开发人员将块参数命名为“格式”,当它最终成为响应程序时(格式信息来自 .html、.xml、.json 或其他)以使代码听起来有点像,这似乎很残忍英语,但阻碍了对实际情况的理解。其实 Responder::respond 是这样定义的,看起来太巧合了:

def respond
  method = "to_#{format}"
  respond_to?(method) ? send(method) : to_format
end

但我看不出这里的格式(在“to_#{format}”中)如何与名为格式的块参数相关联。需要明确的是,它不是实例变量,因为它缺少 @ 符号,对吧?

4

1 回答 1

0

正如博客稍后解释的那样,Responder 实例基本上从这里通过 method_missing 处理 .html 和 .xml,这取决于您的 rails 应用程序可以处理的 mime 类型。 描述 method_missing 的不错的博客之一是这里
基本上,响应者的 method_missing 将在调用 js 和 json 方法时被调用。responder 类的method_missing 将获取“缺失的method_name”(即:js 或:json 符号)作为其第一个参数,这将驱动其渲染逻辑。

于 2012-05-09T04:21:50.060 回答