路由如何在rails中工作

时间:2013-12-29 04:35:59

标签: ruby-on-rails

在我的路线文件中,我有一些如下路线。这意味着什么?我看了rails路线指南,但我找不到=>的解释和foo:'bar'

get '/clients/:status' => 'clients#index', foo: 'bar'

请解释这意味着什么?

2 个答案:

答案 0 :(得分:4)

这意味着对于模式/clients/:status的URI的HTTP GET请求,其中:status是变量参数。

=> clients#index代表Controller#actioncontrollerclientsClientsControlleractionindex

您拥有foo: 'bar'的第三个选项基本上是路线定义的其他选项。其他选项,例如asconstraints等。

例如as(允许您为路线命名):

get '/clients/:status' => 'clients#index', as: :client_status

此处as: :client_status会替换您的foo: 'bar'

答案 1 :(得分:3)

首先,我假设您的Web服务器正在主机和端口localhost:3000上运行。但是这一部分并不重要 - 无论主机和端口是否获得对Rails的请求都是一样的。

get '/clients/:status' => 'clients#index', foo: 'bar'

如果您不熟悉Ruby语法糖,这相当于:

get({'/clients/:status' => 'clients#index', :foo => 'bar'})

从这里,让我一块一块地分解:

  • get表示该路由仅适用于“GET”HTTP请求。
  • '/clients/:status'表示将此路由应用于http://localhost:3000/clients/:status :status其中=> 'clients#index'为任意字符串的请求
  • index告诉Rails它应该调用ClientsController的:foo => 'bar'方法中的代码。
  • params可能在你想要做的事情上更有意义(如vee提到的那样),但在这种情况下,(我认为)它将被添加为s散列中的值{可以在ClientsController {{1}} index`方法中访问。

有关更多信息,请查看路由上的Rails指南。它是Rails文档中最好的部分之一,恕我直言:

http://guides.rubyonrails.org/routing.html