为什么控制器需要多种格式渲染?

时间:2012-12-05 15:14:27

标签: ruby-on-rails

请解释为什么我们需要在控制器中使用此代码?这段代码有什么意义?

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @users }
end

3 个答案:

答案 0 :(得分:2)

它允许您根据用户/调用者请求的格式来不同地格式化输出。如果您要访问http://yourhost/controller/index.html,控制器将使用ERB模板index.html.erb(或HAML或其他)进行响应。如果您要访问http://yourhost/controller/index.json,则会使用JSON模板index.json.erb进行回复。

这允许您拥有一个可以准备数据的控制器操作,然后根据请求的格式选择要渲染的视图。

答案 1 :(得分:2)

定义在调用respond_with时默认呈现的mime类型。 所以基本上,这意味着您的控制器操作可以以不同的格式命中(在您的情况下为html,json),并且仍然将数据提供回调用它的任何内容。这有助于API开发和许多其他事情。 例如:您希望获得所有用户的json列表以使用javascript执行某些操作。你可以调用/users.json,这将转到你的user_controller #index动作,并知道为你的所有用户呈现一个json对象。

答案 2 :(得分:1)

上面的代码是生成的脚手架,它提供了一种为您的控制器呈现*.html*.json视图的方法,使您可以轻松访问用于实现API的数据或用于Web的普通视图应用

您还可以创建XML输出:

format.xml  { render xml: @users }

以及其他格式,如PDF或DOC,具体取决于您使用的宝石。

有关详细信息,请参阅Rails Guide Action Controller Overview