新手问题 使用 kaminari 来实现分页,如何实现回到原先的分页,而不是第一个分页。

zhufengxiangxyz · 2015年04月29日 · 最后由 lanxi 回复于 2015年08月03日 · 2684 次阅读

最近在看 ror 实战圣经, 里面用 kaminari 来实现分页。在第三个分页进入其中一条记录的 show 页面,返回 index 页面的时候会默认在第一个分页。 我要返回原先那个分页。 这个如何实现? :page 如何处理?

这个跟 kaminari 没有关系吧?你可以用 request.referer 来获取之前的页面,但是有可能获取到 nil

#1 楼 @raofeng 我打印了下 request.referer 的值, 保存的是 show 页面...

" 返回 index 页面的时候 " 是怎么返回的

#3 楼 @huobazi show 页面下面有个 back to index 按钮。

#4 楼 @zhufengxiangxyz 那个连接不是由你控制的么 和 kaminari 没关系

#5 楼 @huobazi 😢... 我对 gem 有多大功能,完全没概念,kaminari 内是否提供了函数来实现此功能就更不知道了。 如果要自己来传递保存 第几页 这个参数, 有什么办法?

话说直接使用浏览器上的返回可以啊。 我晕啊。 难道我多问了?!

试试先存到 session 里面,session[:return_to] ||= request.referer, 操作到后面再取出来

根据 Discuz 的解决方案,他是把你打开某个帖子时所在的 index 页数,也作为一个 url 参数传递到内容页里 然后当你再次点击那个返回到列表,或者导航上的帖子列表,就还能获得你浏览列表时的那个页数,是不是感觉有点脏

不过这个需求其实我们应该换个角度来描述,比如说,我当前正在看 A 帖子,我要返回的是 A 帖子所在的页面 比如你打开 A 帖子时候你是在列表页 3,发帖的人很多,A 帖子很快被弄到第四页了,这个时候如果你还是返回第三页也是不合适的,你应该返回到第四页更符合人性一些,所以你只要根据 A 帖子的 ID,再算算有多少帖子比他新,再根据分页数,就可以算出来你应该返回到第几页了(或者是更新日期等其他参数)

#10 楼 @wuwx 众口难调的事情就应该强制风格,养成用户习惯。

我公司有一个网站(电商)站曾经一段时间连接打开当前,有客户反映体验不好,随改为打开新页面,但仍然有人叫不好,后来改为在网站内加个设置让用户选自己是要打开新页面还是在当前页,可来反映的人还是不减少,还要将这个功能的用法给客户教一遍。。。

可以在 index 里面保存一个 session[:page]

def index
  @posts = Post.all.page(params[:page])
  session[:page] = params[:page]
end

这样即使在 show 页面做 destroy 动作,也可以 redirect_to 到 index 页面,只是 index 方法需要有所修改

@posts = Post.all.page(params[:page] || session[:page])

这样在没有 params[:page] 参数的时候就可以取 session 上保存的:page 了 ~~~~ 突然发现 kaminari 的 helper 方法生产的 view,点击第一页[1]是不会带参数?page=1 的。 这样在第一次点击第一页的时候还是会取 session[:page],然后 session 就被置为 nil 了 我的处理方式是直接在需要跳转到历史 index 页面的 action 里调用 session

redirect_to posts_path(page: session[:page])

当然 index 也要改回原来的 code

需要 登录 后方可回复, 如果你还没有账号请 注册新账号