Rails中pagy gem结合turbo frame删除记录后分页URL生成异常
问题:Turbo Stream删除记录后Pagy分页链接路径异常
我在应用中使用pagy gem实现分页,同时用turbo frames完成交互式CRUD操作。删除记录时,通过turbo_stream.erb动作更新分页和列表项框架,除分页链接外一切功能正常。
预期分页链接应为:
/toponyms?page=1 /toponyms?page=2
但删除ID为278的记录后,分页链接变为:
# 因为删除了ID为278的记录 /toponyms278?page=1 /toponyms278?page=2
相关代码
控制器代码
def destroy authorize @toponym @toponym.destroy flash[:info] = "Toponym was successfully destroyed." # 这里必须重新获取分页数据,确保删除后分页更新 @pagy, @toponyms = pagy(Toponym.order(created_at: :desc)) puts @pagy respond_to do |format| format.turbo_stream format.html { redirect_to toponyms_url, notice: "Toponym was successfully destroyed." } format.json { head :no_content } end end
destroy.turbo_stream.erb代码
<%= turbo_stream.update "total" do %> <%== pagy_nav(@pagy) %> <%== pagy_info(@pagy) %> <% end %>
解决方案
问题出在pagy生成链接时的路径来源:删除操作的请求路径是/toponyms/278,pagy默认会基于当前请求路径生成分页链接,导致把记录ID错误地拼接到了路径中。
可以通过两种方式修正:
方法1:初始化pagy时指定基础路径
修改控制器中pagy的初始化代码,添加url: toponyms_url参数,强制pagy使用列表页的路径作为分页链接的基础:
@pagy, @toponyms = pagy(Toponym.order(created_at: :desc), url: toponyms_url)
方法2:在模板中调用pagy_nav时指定路径
如果不想修改控制器,也可以在erb模板里给pagy_nav传入url参数:
<%== pagy_nav(@pagy, url: toponyms_url) %>
两种方法都能让分页链接回到预期的/toponyms?page=X格式。
内容的提问来源于stack exchange,提问作者Sercan Tırnavalı
相关产品推荐
相关产品推荐

