我在使用 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 中删除 - 有没有办法做到这一点?
由于
答案 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