14

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

生成控制器和路由

rails generate controller StaticPages home about team contact

更改路线.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

根路径有效,但“关于”、“团队”或“联系人”链接均无效。这是我得到的错误:

“您不应该match在没有指定 HTTP 方法的情况下在路由器中使用该方法。如果您想将您的操作公开给 GET 和 POST,请添加via: [:get, :post]选项。如果您想将您的操作公开给 GET,请get在路由器中使用:而不是:匹配“controller#action”做:得到“controller#action””

为什么我不能使用“匹配”?

4

3 回答 3

31

match方法已被弃用。

用于getGET 和postPOST。

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

于 2013-08-21T22:53:54.067 回答
15

你可以使用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

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

资料来源:Rails 路由指南

于 2013-08-21T22:49:19.697 回答
0

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

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

但是,有一个问题,你的代码不遵循 RESTful,它只支持 7 种操作:索引、新建、编辑、创建、更新、显示和销毁。

这是2个解决方案:

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

SOL 2:如果工作量太大,我们可以将它们与show行动相匹配。我们使用 static_pages 控制器,每个页面(主页,关于)将是一个项目。

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

我知道这不好,因为前缀static_pages

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

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

而已。如果您认为工作量太大(我也这么认为),请查看这颗宝石High Voltage。玩得开心。

于 2015-02-17T03:01:06.957 回答