Rails中引用了什么(。:format)以及它如何与_path和_url帮助器交互?

时间:2016-12-14 19:19:44

标签: ruby-on-rails ruby

我已经手动编写了我的路线,但在意识到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

2 个答案:

答案 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))'