Rails中路径变量如何映射到params参数?
Rails路径变量到params的映射过程解析
当你配置了类似get 'x/y/:id'的路由,访问localhost:3000/x/y/2时,路径里的2能以params[:id]的形式被获取,整个过程可以拆成三个核心步骤:
路由正则生成与匹配
Rails启动时会把所有路由规则转换成正则表达式。:id这种占位符会被替换成匹配任意非斜杠字符的正则片段(([^\/]+)),所以这条路由对应的正则大致是^x/y/([^\/]+)$。当请求进来后,Rails会用这个正则匹配请求的路径/x/y/2,匹配成功后会捕获到2这个字符串值。占位符与值的映射
匹配到捕获值后,Rails会直接把路由里的占位符名称:id作为键,捕获到的2作为值,生成一个基础的键值对{ id: '2' }。如果路由里有多个占位符(比如get 'users/:user_id/posts/:post_id'),Rails会按顺序捕获对应位置的值,分别映射到对应的键。整合进params对象
这个路径参数的键值对会和查询参数、POST表单参数等其他来源的参数一起,被整合到params(ActionController::Parameters实例)中。最终你就能在控制器里通过params[:id]访问到这个值——如果后续需要数值类型,还可以通过params[:id].to_i或者强参数的类型转换来处理。
整个过程属于请求处理的早期阶段,在请求进入控制器动作之前就完成了,由Rails的Action Pack路由模块负责执行。
内容的提问来源于stack exchange,提问作者Aaquib Jawed
相关产品推荐
相关产品推荐

