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: :get
在match '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高压 。 玩得开心。