在删除第 2 页上的最后一条记录时,将用户导航回第 1 页
On deleting the last record on page 2, navigate user back to page 1
我在 rails 应用程序上使用 Kaminari Gem。
我有当前索引页面和正确的导航菜单。
def index
@dogs = Dog.all.page(params[:page]).per(20)
end
def destroy
if @dog.destroy
# use this so that if the page got other records, the user got to stay at that navigated page.
redirect_back fallback_location: dogs_path, flash: { success: 'deleted dog from list' }
else
# show some errors
end
end
当用户在第 2 页并删除第 21 条狗记录时,记录被删除并且浏览器显示没有记录的空白页面,因为 url 正在指定 /dogs?page=2
。
这是默认行为还是 Kaminari 或我的方法有问题?我之前希望 Kaminari 将用户重定向到 1 个页面,因为当前页面不包含任何记录。
谢谢。
您需要在删除操作完成后定义索引URL。我相信您已经完成了以下操作。
redirect_to :back
并保持在同一页上。
您应该使用索引页而不是返回页 URL。
一般在Rails5,现在可以使用redirect_back(the_path_that_you_want)
我正在考虑这样做,但在为空时仍会重定向到同一页面。嗯..
def delete
...
prev_page = Dogs.page(params[:page]).per(20).count < 1 ? params[:page].to_i - 1 : params[:page]
redirect_back(fallback_location: dogs_path(page: prev_page, notice: "...", anchor: "if_you_wanted_to"))
end
你可以使用 request.referer 下面是销毁的示例,首先你用 session[:return_to] = request.referrer 保存 referer,然后销毁你 return使用 redirect_to session.delete(:return_to)
返回上一页
def destroy
session[:return_to] = request.referrer
....
@dog.destroy
if session[:return_to]
redirect_to session.delete(:return_to)
else
redirect_to dogs_path
end
end
假设您的狗索引页面路径为 dogs_path
def destroy
if @dog.destroy
page = params[:page]
#this is to check if we have more elements on the page or not
@dogs = Dog.all.page(page).per(20)
if @dogs.length == 0
page = (page - 1) > 1 ? page - 1 : 1
end
redirect_to dogs_path(page: page)
else
# show some errors
end
end
我在 rails 应用程序上使用 Kaminari Gem。
我有当前索引页面和正确的导航菜单。
def index
@dogs = Dog.all.page(params[:page]).per(20)
end
def destroy
if @dog.destroy
# use this so that if the page got other records, the user got to stay at that navigated page.
redirect_back fallback_location: dogs_path, flash: { success: 'deleted dog from list' }
else
# show some errors
end
end
当用户在第 2 页并删除第 21 条狗记录时,记录被删除并且浏览器显示没有记录的空白页面,因为 url 正在指定 /dogs?page=2
。
这是默认行为还是 Kaminari 或我的方法有问题?我之前希望 Kaminari 将用户重定向到 1 个页面,因为当前页面不包含任何记录。
谢谢。
您需要在删除操作完成后定义索引URL。我相信您已经完成了以下操作。
redirect_to :back
并保持在同一页上。
您应该使用索引页而不是返回页 URL。
一般在Rails5,现在可以使用redirect_back(the_path_that_you_want)
我正在考虑这样做,但在为空时仍会重定向到同一页面。嗯..
def delete
...
prev_page = Dogs.page(params[:page]).per(20).count < 1 ? params[:page].to_i - 1 : params[:page]
redirect_back(fallback_location: dogs_path(page: prev_page, notice: "...", anchor: "if_you_wanted_to"))
end
你可以使用 request.referer 下面是销毁的示例,首先你用 session[:return_to] = request.referrer 保存 referer,然后销毁你 return使用 redirect_to session.delete(:return_to)
返回上一页def destroy
session[:return_to] = request.referrer
....
@dog.destroy
if session[:return_to]
redirect_to session.delete(:return_to)
else
redirect_to dogs_path
end
end
假设您的狗索引页面路径为 dogs_path
def destroy
if @dog.destroy
page = params[:page]
#this is to check if we have more elements on the page or not
@dogs = Dog.all.page(page).per(20)
if @dogs.length == 0
page = (page - 1) > 1 ? page - 1 : 1
end
redirect_to dogs_path(page: page)
else
# show some errors
end
end