Rails中的匹配和路由

我生成了一个控制器并更改了路由,但打开链接会在本地服务器上产生错误。

生成控制器和路由

rails generate controller StaticPages home about team contact 

改变routes.rb

 MyApp::Application.routes.draw do root to: 'static_pages#home' match '/about', to: 'static_pages#about' match '/team', to: 'static_pages#team' match '/contact', to: 'static_pages#contact' end 

根路径有效但“约会”,“团队”或“联系”链接都不起作用。 这是我得到的错误:

“如果不指定HTTP方法,则不应在路由器中使用match方法。如果要将操作公开给GET和POST,请via: [:get, :post]选项添加。如果要将操作公开给GET,在路由器中使用get :而不是:匹配“controller#action”执行:get“controller#action”“

为什么我不能使用’匹配’?

match方法已被弃用。

使用get获取GET并post POST。

get '/about', to: 'static_pages#about'

你可以使用match ,你必须添加一个via:选项:

 match '/about', to: 'static_pages#about', via: :get match '/team', to: 'static_pages#team', via: :get match '/contact', to: 'static_pages#contact', via: :get 

您还可以将其他HTTP谓词传递给via:如果需要,请via: [:get, :post]

来源: Rails路由指南

首先,您必须via: :getmatch 'st' => 'controller#action的末尾添加via: :get来指定HTTP方法

并且最好使用get '/home', to: 'static_pages#home'

但是,存在一个问题,即您的代码不遵循RESTful,只支持7个操作:索引,新建,编辑,创建,更新,显示和销毁。

这是两个解决方案:

SOL 1 :将它们放在不同的控制器(家庭,约……)中,所有这些控制器都有动作index

SOL 2 :如果工作太多,我们可以匹配它们以show动作。 我们使用static_pages控制器,每个页面(home,about)都是一个项目。

路线看起来像/static_pages/home /static_pages/about

我知道因为前缀static_pages而不好。

我们可以通过在路径文件末尾添加自定义路由来轻松摆脱这种情况:

get '/:id', to: 'static_pages#show'

而已。 如果你认为它太多工作(我也这么认为),请查看这个gem高压 。 玩得开心。