了解包含(=>)和(:as)的rails路由

时间:2016-02-10 10:11:12

标签: ruby-on-rails ruby-on-rails-4

在阅读rails路由时,我发现包含=>的路由。但我并不知道这意味着什么。我还发现了一些路由示例:as。如果有人解释一下它会很好。我已阅读过rails指南,但我仍然不太清楚它们。

请解释这意味着什么

 get 'customer_details' => "customers#details"

get 'customer_details' => "customers#details", :as => :customerdetails

1 个答案:

答案 0 :(得分:4)

每次定义route时,都必须为该路线定义controller#action

#config/routes.rb
get :customer_details =>   "customers#details"
get :customer_details, to: "customers#details"
get :customer_details, controller: :customers, action: :details
  

路由模块在本机Ruby中提供URL重写。这是一种将传入请求重定向到控制器和操作的方法。

     

以下符号是特殊的:

:controller maps to your controller name
:action     maps to an action with your controllers
     

其他名称只是映射到参数,如:id

使用=>只是to: shortcutoption ...

  

当模式指向内部路由时,路径的:action:controller应设置为选项或散列速记。例子:

match 'photos/:id'  => 'photos#show', via: :get
match 'photos/:id', to: 'photos#show', via: :get
match 'photos/:id', controller: 'photos', action: 'show', via: :get

简而言之,这是将所需的“controller#action”参数传递给Rails路由器的另一种方法。

-

当然,使用resources指令可以取消这一点,该指令设置了controller&隐含地actions

#config/routes.rb
resources :customers, only: [], path: "" do
  get :customer_details, on: :collection #-> url.com/customer_details
end

路由中间件(ActionDispatch::Routing)接收入站网址路径,并根据您定义的路由进行匹配 - 将用户发送到相应的controller / action

整个路由结构(即使您使用link_to)取决于controller& action设置路线;特别是path helper

设置as:使您能够明确定义路径的名称,例如:

#config/routes.rb
get "search/:query", to: "application#search", as: :app_search

...以上将创建帮助器<%= app_search %>

<强>更新

在回复您的评论时,您需要使用以下任一项:

#config/routes.rb
get "customers/details", to: "customers#details" #-> url.com/customers/details

- or -

resources :customers do
  get :details, on: :collection #-> url.com/customers/details
end

如果您正在定义单个路由,那么只有Ruby可以在没有任何插值的情况下解释该数据时才使用symbols。例如,get :details可以视为get "details",但get "customers/details"不能视为符号。