假设我们在控制器中有以下自动生成的代码:
def update
respond_to do |format|
if @person.update(person_params)
format.html { redirect_to @person, notice: 'Person was successfully updated.' }
format.json { render :show, status: :ok, location: @person }
else
format.html { render :edit }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
让我说我很好奇想知道什么是对象format
返回以了解调用的json
或html
对象。回答这些简单问题的文件在哪里?
我试过了ri format
,得到了这个(等等):
Returns the MIME type for the format used in the request.
GET /posts/5.xml | request.format => Mime::XML
GET /posts/5.xhtml | request.format => Mime::HTML
GET /posts/5 | request.format => Mime::HTML or MIME::JS, or request.accepts.first
如果我ri Mime::HTML
,我明白了:
Nothing known about Mime::HTML
但是有Mime::Type
的文档(我认为上面的format
返回),并且它声明这个类有一个实例方法method_missing
,我想这是什么我们执行format.html
或format.json
时调用。我想知道的是:如果我对method_missing
后备技巧是正确的,那么为什么没有Mime::HTML.method_missing
的文档?为什么首先没有Mime::HTML
或Mime::XML
的文档?换句话说,Mime::HTML
或Mime::XML
与Mime:Type
之间的关系是什么?
答案 0 :(得分:1)
阅读本文:
https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/mime_types.rb
而且:
要回答您的问题:Mime::HTML
和Mime::XML
是动态生成的常量,使用Mime::Type.register
。