【问题标题】:Matching and Routes in RailsRails 中的匹配和路由
【发布时间】:2013-08-24 12:06:06
【问题描述】:

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

生成控制器和路由

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: 而不是: match "controller#action" Do: get "controller#action""

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

【问题讨论】:

  • 您使用的是什么 Rails 版本?在终端,转到这个 rails 项目并执行rails -v
  • 我使用的是 4.0.使用 'get' 而不是 'match' 解决了这个问题。谢谢

标签: ruby-on-rails ruby routes


【解决方案1】:

match method has been deprecated.

对 GET 使用 get,对 POST 使用 post

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

【讨论】:

  • +1,Rails Routing Guide 的当前版本没有说明 match 被弃用。好资料!
  • 不推荐使用(还),只需要添加 via: 就像 user2062950 说的那样。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    这是 2 个解决方案:

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

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

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

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

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

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

    就是这样。如果您认为工作量太大(我也这么认为),请查看此 gem High Voltage。玩得开心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多