You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails嵌套路由:父资源展示页中嵌套资源Delete操作无法正常生效

问题根因

你遇到的报错是人员详情页的删除链接路由参数配置错误导致的:

  • 你用了嵌套路由,路径规则为 /persons/:person_id/nicknames/:id,对应的路由辅助方法 person_nickname_path 需要传入两个参数:第一个是父资源 @person 实例,第二个是子资源昵称实例
  • 你当前写的 person_nickname_path(aka) 只传入了昵称实例,Rails 会自动把这个昵称的 ID 填充到路由的第一个动态段 person_id 位置,导致后端拿到的 person_id 实际是昵称的 ID,自然找不到对应的 Person 记录
修复方案

修改 views/persons/show.html.erb 中的代码,同时修正你循环变量引用不一致的笔误:

<% @person.nicknames.each do |aka| %>
  <li>
    <%# 修正循环变量引用,当前循环块变量是aka,不存在nickname变量 %>
    <%= link_to aka.display_name, edit_person_nickname_path(@person, aka) %>
    <%# 路由方法补充@person作为第一个参数 %>
    <%= link_to '', person_nickname_path(@person, aka), method: :delete, data: { confirm: 'Are you sure?' }, class: "far fa-trash-alt text-error", title: "Remove" %>
  </li>
<% end %>
额外说明

你在昵称详情页删除功能正常,是因为昵称详情页的删除链接正确传入了两个参数,后端拿到的 person_id 是真实的人员 ID,所以不会触发报错。

内容的提问来源于stack exchange,提问作者tkhobbes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:04