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

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

提问人:tkhobbes 提问时间:12/6/2021 最后编辑:tkhobbes 更新时间:12/10/2021 访问量:66

问:

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

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

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

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

我忽略了什么?

Ruby-on-Rails 嵌套

评论


答:

0赞 tkhobbes 12/10/2021 #1

好的 - 所以很简单,因为它是愚蠢的。删除链接的路径错误 - 应该是

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

但我有

..person_nickname_path(aka) ...