我正在升级一个非营利性的旧应用程序,我在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的漫长道路的开始;)
答案 0 :(得分:0)
您是否尝试过default_url_options
。我认为这对你有帮助。
class AppplicationController < ActionController::Base
# ...
protected
def default_url_options
{ page_slug: 'tribes', language_id: 3, section_id: 4 }
end
end