我已经手动编写了我的路线,但在意识到Rails中的无意义之后放弃了,因为这个框架的很大一部分目的是自动重复。
使用Rails'生成我的路线后resources
关键字,我无法找到任何明确的文档来解释(.:format)
参数代表的内容。我还不清楚_path
和_url
帮助者如何参与这些路线:
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
答案 0 :(得分:3)
这些是路由文件中Rails resources
帮助程序生成的标准路由。
(.:format)
是指您可以传递给帮助程序的变量/参数,它将请求转换为定义的格式:
/posts.json # will handle the requests as JSON
/posts # will handle the request as the default, html.
您可以在" Rails Routing from the Outside In"。
中详细了解相关信息答案 1 :(得分:2)
括号表示模式中的可选绑定参数。它说如果URL中有一个点后跟一些文本,那么它将以params[:format]
的形式显示,但这对于要匹配的路由是可选的。
这意味着URL可以采用以下格式传递:
GET /posts
GET /posts.json
GET /posts.pdf
GET /posts.xml
默认值为html
。
使用_path
或_url
帮助程序构建网址时,您可以将格式作为网址的另一个值传递:
# href will be /posts.json
link_to 'Posts JSON', posts_path(:json)
# href will be /posts/1234.json
link_to @post.title, post_path(@post, :json)
在控制器中,您可以通过不同方式响应这些格式:
def index
@posts = Post.order(created_at: :desc)
respond_to do |format|
format.html # This will render `index.html.erb` automatically
format.json { render json: @posts }
format.csv do
# Do some CSV stuff here
end
end
end
指南中的Bound Parameters部分以迂回的方式提及括号的功能:
因为
:action
和:id
是可选参数,用圆括号表示。
这是指示例路线:
get ':controller(/:action(/:id))'