Rails will_paginate - 如何制作更好的路线?

时间:2013-06-16 19:00:09

标签: ruby-on-rails ruby pagination routes will-paginate

我在使用 will_paginate gem列出的文章主页列表中。 一切运作良好,但有一件事我想改进 - 在主页上,数据被加载到主页控制器和索引操作。

因此,当我加载我的网站 - www.website.com 时,数据会加载到主页/索引。当我点击第二页的分页链接时,该链接 www.website.com/home/index?page=2 。我希望以最好的方式看到 www.website.com/page/2 (或 www.website.com/?page=2 )。

基本上,重点是从网址 / home / index 中删除 - 有没有办法做到这一点?

由于

2 个答案:

答案 0 :(得分:1)

您可以这样做 - 将此类添加到某个帮助程序模块,例如app/helpers/application_helper.rb

module ApplicationHelper

  class SmartLinkRenderer < WillPaginate::ActionView::LinkRenderer
    protected
    def link(text, target, attributes = {})
      if target.is_a? Fixnum
        attributes[:rel] = rel_value(target)
        target = url(target)
      end
      attributes[:href] = target.gsub(/[?&]page=(\d+)/,'/page/\1')
      tag(:a, text, attributes)
    end
  end

end

您可以根据需要进行自定义,例如

attributes[:href] = target.gsub(/home\/index/,'')

或其他什么。然后你可以在你的观点中这样做:

<%= will_paginate @items, :renderer => 'ApplicationHelper::SmartLinkRenderer' %>

答案 1 :(得分:0)

试试这个

root to: 'home#index'
你在config / routes.rb文件中

修改

能够路由这些请求: www.website.com/page/2

将此添加到routes.rb:

match "page/:page" => "your_root_controller#index"

这样:page 将出现在 params 哈希中。 例如,查看Message模型的索引方法可以是:

  def index
    @messages = Messages.paginate(page: params[:page])
  end
希望可以提供帮助。有关详细信息,请参阅RoR routing