Rails 嵌套路由:显示父资源时,删除操作对嵌套资源不起作用

Rails Nested Route: Delete action doesn't work for nested resource when displaying parent resource

我有一个包含人物和昵称的数据库,昵称是人物的嵌套资源。

除一件事外一切正常: 我在人们的“显示”页面上显示昵称列表 - 在他们旁边,我有一个小 link,上面写着“删除”。但是我无法删除它们 - 我收到如下错误:

Couldn't find Person with 'id'=44
  def load_person
    @person = Person.find(params[:person_id])
  end

load_person方法在nicknames_controller中定义为

before_action :load_person

def load_person
  @person = Person.find(params[:person_id])
end

这是来自 nicknames_controller.rb 的 destroy 方法:

  def destroy
    @nickname.destroy
    respond_to do |format|
      format.html { redirect_to @person, notice: "Nickname was successfully destroyed." }
      format.json { head :no_content }
    end
  end

这是 views/persons/show 的视图片段。html.erb:

<% @person.nicknames.each do |aka| %>
  <li>
    <%= link_to nickname.display_name, edit_person_nickname_path(@person, aka) %>
    <%= link_to '', person_nickname_path(aka), method: :delete, data: { confirm: 'Are you sure?' }, class: "far fa-trash-alt text-error", title: "Remove" %>
  </li>
<% end %>

所以“删除”的路径类似于

http://127.0.0.1:3000/persons/44/nicknames/15

当我显示昵称(显示方法)并从那里删除(与上述相同的路线)时,一切正常。

我忽略了什么?

好的 - 简单到愚蠢。删除 link 的路径错误 - 应该是

<%= link_to '', person_nickname_path(@person, aka) .... %>

但我有

..person_nickname_path(aka) ...