如何重命名Rails嵌套路由参数 将students_id修改为id
问题解决方法
你当前路由参数不符合预期的核心原因是没有将honor声明为students资源的成员路由,Rails无法正确识别该路由作用于单个学生资源,才会生成异常的参数命名。
只需要给honor路由添加on: :member配置即可,修改后的路由代码如下:
resources :classrooms, only: [:index, :new, :create] do resources :students, only: [:index, :edit, :update], controller: 'students' do get :honor, on: :member end end
配置完成后重新加载路由,生成的路径会完全符合你的预期:/classrooms/:classroom_id/students/:id/honor(.:format)
此时在StudentsController的honor动作中,直接通过params[:id]就能获取对应学生记录的主键值,父级教室ID通过params[:classroom_id]获取,和常规的show、edit等成员动作的参数逻辑完全一致。
补充说明:如果后续你需要自定义学生资源的参数名(比如用学号
student_no代替主键id),可以在resources :students后添加param: :student_no配置,不需要修改其他路由规则。
内容的提问来源于stack exchange,提问作者Matt-pow
相关产品推荐
相关产品推荐

