什么。:格式在rake路线中意味着什么

时间:2013-12-02 03:13:22

标签: ruby-on-rails rake

我输入了rake路线,我得到了一堆这样的网址 - /articles/:id(.:format)

我的问题是 - .:format是什么意思? Rails指南路由文章中并不清楚,并且StackOverflow或google上的.:format没有其他有用的匹配。有一种类似的格式/:controller(/:action(/:id(.:format))),我也不明白。

由于

编辑跟进问题 -

如果我只想路由HTML页面。最佳做法是在路由中指定类似。:html的内容或使用。:format并为format.html写一个respond_to块吗?在后一种情况下,是否会忽略所有其他格式?

2 个答案:

答案 0 :(得分:18)

这是所请求文件的格式。例如,如果你想要一个图像,你可能在请求中有一个文件扩展名 - 例如,example.com/example_image.png会给你格式为png。然后将其包含在请求中,以便根据所请求的格式改变响应类型。

对于一个用法示例,您可能希望允许将资源表示为pdf,作为普通的html页面和json - 您可能会写这样的内容:

respond_to do |format|
  format.html { ... }
  format.pdf { ... }
  format.json { ... }
end

然后在各自的格式下进行单独的渲染调用。


修改

GET /:controller(/:action(/:id(.:format))) :controller#:action -

的解释

首先,关于格式化。括号表示给定的数据是可选的。冒号意味着它在相应URL中找到的任何字符串都应该在params散列中传递给控制器​​。

这实际上是一个通配符匹配器,它将尝试将非常多的请求与控制器进行匹配。例如,假设这是你唯一的路线,有人试图获得'/ users'。这会将users映射到UsersController,默认情况下会在其中调用/呈现index。如果有人获得users/new,则会调用控制器中的new操作。如果调用了idformat,它们也会被传递给控制器​​。

答案 1 :(得分:2)

:format匹配mime类型。

例如,如果您发送查找index.html的请求,则格式会将'html'捕获为:format。

然后在您的控制器中,它将被

之类的东西处理
respond_to do |format|
  format.html { #do something like redirect in here }
end