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

Rails中删除后重定向至来源索引页及删除链接放置问题

解决方法:根据来源页面重定向的删除操作

嘿,这个场景我之前做项目的时候刚好遇到过,给你两个实用的解决方案,你可以根据自己的需求选:

方案一:直接利用请求来源(简单快捷)

Rails里的request.referer可以直接获取到用户跳转到当前页面的来源URL,我们可以在Books控制器的destroy方法里直接用它来做重定向:

# app/controllers/books_controller.rb
def destroy
  @book = Book.find(params[:id])
  @book.destroy
  # 如果来源存在就跳回去,否则默认跳转到books索引页
  redirect_to request.referer || books_path, notice: "Book deleted successfully!"
end

对应的show页面删除链接不用额外加参数,正常写就行:

# app/views/books/show.html.erb
<%= link_to "Delete Book", @book, method: :delete, data: { confirm: "确定要删除这本书吗?" } %>

这个方案的好处是不用修改任何跳转链接,直接在控制器里处理就行,非常省心。不过要注意:有些浏览器或者隐私设置可能会屏蔽referer信息,这时候就会触发默认的books_path跳转。

方案二:手动传递来源标识(更可控)

如果想完全掌控跳转逻辑,避免referer失效的情况,可以在跳转的时候给show页面传递一个来源参数,然后根据这个参数决定重定向目标:

  1. 修改两个索引页的跳转链接,加上source参数:

    # app/views/users/index.html.erb(用户索引页的书籍链接)
    <%= link_to book.title, book_path(book, source: "users") %>
    
    # app/views/books/index.html.erb(书籍索引页的自身链接)
    <%= link_to book.title, book_path(book, source: "books") %>
    
  2. 在show页面的删除链接里带上这个source参数:

    # app/views/books/show.html.erb
    <%= link_to "Delete Book", book_path(@book, source: params[:source]), method: :delete, data: { confirm: "确定要删除这本书吗?" } %>
    
  3. 在Books控制器的destroy方法里判断来源:

    # app/controllers/books_controller.rb
    def destroy
      @book = Book.find(params[:id])
      @book.destroy
      
      redirect_path = params[:source] == "users" ? users_path : books_path
      redirect_to redirect_path, notice: "Book deleted successfully!"
    end
    

这个方案的优势是逻辑更清晰,不会受浏览器设置影响,适合对跳转逻辑有严格要求的场景。

小提示

不管用哪个方案,都记得加上data: { confirm: ... }的确认提示,避免用户误触删除操作哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:58:12