【问题标题】:Rails will_paginate - how to make nicer route?Rails will_paginate - 如何制作更好的路线?
【发布时间】:2013-06-18 23:59:29
【问题描述】:

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

所以,当我加载我的网站 - 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 中删除 - 有什么方法可以做到这一点?

谢谢

【问题讨论】:

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


    【解决方案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' %>
    

    【讨论】:

      【解决方案2】:

      试试这个

      root to: 'home#index'
      

      在你的 config/routes.rb 文件中

      编辑

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

      将此添加到 routes.rb:

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

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

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

      希望能有所帮助。更多信息请参考RoR routing

      【讨论】:

      • 这是设置好的,这就是为什么 www.website.com 显示来自home#index 的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2011-03-24
      • 2013-07-25
      相关资源
      最近更新 更多