max*_*ner 28 rake ruby-on-rails
我输入了rake路线,我得到了一堆这样的网址 - /articles/:id(.:format)
我的问题是 - .:format意思是什么?从Rails Guides Routing文章中不清楚,.:formatStackOverflow或google上没有其他有用的匹配.有一种类似的格式,/:controller(/:action(/:id(.:format)))我也不明白.
谢谢
编辑跟进问题 -
如果我只想路由HTML页面.最佳做法是在路由中指定类似.:html的内容或使用.:format并为format.html写一个respond_to块?在后一种情况下,是否会忽略所有其他格式?
Bub*_*les 23
这是所请求文件的格式.例如,如果你想要一个图像,你可能在请求中有一个文件扩展名 - 例如,example.com/example_image.png 会给你格式为png.然后将其包含在请求中,以便根据所请求的格式改变响应类型.
对于一个用法示例,您可能希望允许将资源表示为pdf,作为普通的html页面和json - 您可能会编写如下内容:
respond_to do |format|
format.html { ... }
format.pdf { ... }
format.json { ... }
end
Run Code Online (Sandbox Code Playgroud)
然后在相应的格式下进行单独的渲染调用.
编辑:
说明GET /:controller(/:action(/:id(.:format))) :controller#:action-
首先,关于格式化.括号表示给定的数据是可选的.冒号意味着它在相应URL中找到的任何字符串都应该传递给params散列中的控制器.
这本质上是一个通配符匹配器,它将尝试将大量请求与控制器进行匹配.例如,假设这是你唯一的路线,有人试图获得'/ users'.这将映射users到UsersController,并在其中默认调用/ render index.如果有人获得users/new,new将调用控制器内的操作.如果id和format被调用,它们也将被传递给控制器.
.:format 匹配 mime 类型。
例如,如果您发送查找 index.html 的请求,则格式会将“html”捕获为:format。
然后在你的控制器中它将被类似的东西处理
respond_to do |format|
format.html { #do something like redirect in here }
end
Run Code Online (Sandbox Code Playgroud)