最近在看 ror 实战圣经,里面用 kaminari 来实现分页。在第三个分页进入其中一条记录的 show 页面,返回 index 页面的时候会默认在第一个分页。 我要返回原先那个分页。这个如何实现? :page 如何处理?
link_to 可以使用 :back
来返回到 referrer。详见 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
根据 Discuz 的解决方案,他是把你打开某个帖子时所在的 index 页数,也作为一个 url 参数传递到内容页里 然后当你再次点击那个返回到列表,或者导航上的帖子列表,就还能获得你浏览列表时的那个页数,是不是感觉有点脏
不过这个需求其实我们应该换个角度来描述,比如说,我当前正在看 A 帖子,我要返回的是 A 帖子所在的页面 比如你打开 A 帖子时候你是在列表页 3,发帖的人很多,A 帖子很快被弄到第四页了,这个时候如果你还是返回第三页也是不合适的,你应该返回到第四页更符合人性一些,所以你只要根据 A 帖子的 ID,再算算有多少帖子比他新,再根据分页数,就可以算出来你应该返回到第几页了(或者是更新日期等其他参数)
可以在 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