1

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

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

基本上,关键是从 URL /home/index中删除- 有没有办法做到这一点?

谢谢

4

2 回答 2

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' %>
于 2013-06-17T20:24:35.297 回答
0

尝试这个

root to: 'home#index'

在你的 config/routes.rb 文件中

编辑

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

将此添加到 routes.rb:

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

这样:page将在您的参数哈希中。例如查看消息模型的索引方法可以是:

  def index
    @messages = Messages.paginate(page: params[:page])
  end

希望能有所帮助。有关详细信息,请参阅RoR 路由

于 2013-06-16T19:09:27.403 回答