2013-08-21 41 views
12

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

根路径的工作,但没有“一下, '团队' 或 '接触' 链接工作。这是我得到的错误:

“你不应该在你的路由器中使用match方法,而不指定HTTP方法如果你想让你的行为同时暴露给GET和POST,添加via: [:get, :post]选项如果你想暴露你的动作GET,在路由器中使用get:而不是:匹配“控制器#动作”做:获得“控制器#动作”

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

+0

你正在使用什么Rails版本?在终端中,转到这个rails项目并执行'rails -v'。 –

+2

我正在使用4.0。使用'get'而不是'match'解决了这个问题。谢谢 – megashigger

回答

26

match method has been deprecated.

使用针对GET的和针对POST的post

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

+2

+1,[Rails路由指南]的最新版本(http://guides.rubyonrails.org/routing.html)没有提到'match'被弃用。好信息! – 2013-08-22 15:45:54

+0

尚未弃用(尚未),只需要添加via:就像user2062950所说。 –

13

您可以使用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 Routing Guide

0

首先,你必须通过在match 'st' => 'controller#action

末增加via: :get指定HTTP方法,它是更好地使用get '/home', to: 'static_pages#home'

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

这些是2个解决方案:

SOL 1:把它们放在不同的控制器(院,abouts ..),所有这些控制器有动作index

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

的路由看起来喜欢 /static_pages/home /static_pages/about

我知道那是因为前缀static_pages的并不好。

我们可以很容易的通过路线的最后添加自定义路线摆脱这个文件:

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

就是这样。如果你觉得这是太多的工作(我也这么认为),看看这个宝石High Voltage。玩的开心。