【发布时间】:2017-06-14 22:27:44
【问题描述】:
我正在为非营利组织升级一个旧应用程序,但我在 Rails 3.0.20 上遇到了一些路由和控制器测试问题(Rails 2 -> 3 是我需要进行的许多升级中的第一个: ( )
这是我的路线定义:
match "new/tribes" => "news#tribes",
as: "en_news_tribes",
defaults: {
page_slug: 'tribes',
language_id: 3,
section_id: 4
}
这个想法是,当控制器被调用时,参数将包括 page_slug、language_id 和 section_id 的默认值
在我的控制器测试(基于 TestUnit)中,操作是这样调用的:
get :tribes, { section_id: 4, language_id: 4, tribe_id: @loc_tribe.tribe.id }
但这会产生这个路由异常:
ActionController::RoutingError: No route matches {:section_id=>4, :language_id=>3, :tribe_id=>1, :controller=>"news", :action=>"tribes"}
只有当我指定所有默认参数时,它才会找到路由(并且测试通过):
get :tribes, { section_id: 4, language_id: 4, tribe_id: @loc_tribe.tribe.id, page_slug: 'tribes' }
如果我传递的参数与config/routes.rb 中指定的默认参数值不匹配,则找不到路由。
即这不起作用:
get :tribes, { section_id: 4, language_id: 4, tribe_id: @loc_tribe.tribe.id, page_slug: 'Abc123' }
所以看起来这些默认值实际上是路由约束?
希望有人能帮忙!我正处于将这个应用程序导入 Rails 5 的漫长道路的开始;)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rails-routing