我的路由中有以下一行。(Rails 6.0.3.7)
namespace :api do
namespace :xml do
get ":resource_type/:id",
resource_type: /[^.]+/,
id: /[h-]+/,
controller: "generic_resources",
action: "show"
end
end
我期望类似api_xml_path 1, action: "show", resource_type: "as/df"
的东西返回类似/api/xml/as/df/1
的东西。但我得到的却是"/api/xml/as%2Fdf.1"
。
是否有不同的方式,我应该调用我的_path
助手在这里?
Rails将每个路径参数的值(例如,:resource_type
)视为URI语法中的单个'路径段'。根据URI语法规范,任何保留字符(包括分隔符'/','?', '#'等)必须是百分比编码的,这是Rails自动完成的。
更简单地说,Rails不知道你试图使用'as/df'
中的'/'
作为路径分隔符,它只看到一个需要编码的字符串。
如果你有像这样的通用嵌套资源,你最好把路径规范本身分开,这样它就有多个参数:
namespace :api do
namespace :xml do
get ":resource_type/:subtype/:id",
...
end
end
然后:
api_xml_path 1, action: "show", resource_type: "as", subtype: 'df'