我生成了一个控制器并更改了路由,但打开链接会在我的本地服务器上产生错误。
生成控制器和路线
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
:而不是:匹配“控制器#动作”做:得到“控制器#动作”“
为什么我不能使用'匹配'?
答案 0 :(得分:27)
答案 1 :(得分: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]
答案 2 :(得分:0)
首先,您必须在via: :get
match 'st' => 'controller#action
来指定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 High Voltage。玩得开心。