【问题标题】:rake routes with multiple parameters具有多个参数的 rake 路由
【发布时间】:2011-10-10 23:10:11
【问题描述】:

这是其中一个 url 的 rake 路由输出

bug_info  /bugs/:pr/:scope/info(.:format)       {:controller=>"bugs", :action=>"info"}

如果我调用 bug_info_path(:pr=>1,:scope=>2) 在 erb 视图中,视图会给我一个错误提示

没有路由匹配 {:scope=>"2", :action=>"info", :controller=>"bugs", :pr=>"1"}

我做错了什么

match 'bugs/:pr/:scope/info' => 'bugs#info', :as=>:bug_info

【问题讨论】:

  • 尝试重命名 :scope,只是猜测它可能会与某些 rails 参数发生冲突
  • 确定BugsController有info实例方法吗?
  • 我将其命名为“abcdef”,但仍然出现同样的错误
  • 是的。我有信息方法。否则错误将是控制器上的“无操作”
  • 删除匹配中的一个或所有参数是否有效?

标签: ruby-on-rails-3


【解决方案1】:

很奇怪。我通过生成一个新的 Rails 应用程序并填充了你的东西进行了测试,它似乎工作正常。这是我得到的。 (这适用于 Rails 3.0.7)。

config/route.rb

Railstest::Application.routes.draw do
  match 'test' => 'bugs#test', :as=>:bug_test
  match 'bugs/:pr/:scope/info' => 'bugs#info', :as=>:bug_info
end

app/controllers/bugs_controller.rb

class BugsController < ApplicationController
  def test
  end

  def info
  end
end

app/views/bugs/test.erb

<%= bug_info_path(:pr=>1,:scope=>2) %>

app/views/bugs/info.erb

<%= params %>

当我浏览到 /test 时,我得到了这个:

/bugs/1/2/info

当我浏览到/bugs/1/2/info

{"controller"=>"bugs", "action"=>"info", "pr"=>"1", "scope"=>"2"}

也许您也可以尝试使用最小的 rails 应用程序,然后添加内容直到我崩溃。

【讨论】:

  • 我将用最小的应用程序尝试这个并测试它
  • 不,还是同样的错误。我正在运行rails 3.1。但是,如果我提供 *pr/*scope 而不是 :pr/:scope 那么它运行良好而没有任何错误
  • 我明白了。在我的示例中,我使用带有点的动态段,例如 /bugs/1/1.1/info。所以它失败了。我在范围中添加了一个约束以接受点并且它起作用了
猜你喜欢
  • 2016-10-12
  • 2014-02-04
  • 2012-07-09
  • 2017-06-27
  • 2020-11-16
  • 2013-11-29
  • 2013-11-27
  • 2014-05-04
  • 2014-06-15
相关资源
最近更新 更多