【问题标题】:Adding pagination to index.html.erb in Ruby on Rails - Easy Question在 Ruby on Rails 中向 index.html.erb 添加分页 - 简单问题
【发布时间】:2010-12-18 18:47:59
【问题描述】:

我是 Rails 新手,所以请放轻松。我已经建立了我的第一个博客,并希望将其设置为在 渲染帖子,我希望它只显示 10 个帖子,然后有一个链接可以查看下一个 10 个。

我希望这是一个简单的问题。如果您希望我发布任何代码,请告诉我。

【问题讨论】:

    标签: ruby-on-rails ruby pagination blogs


    【解决方案1】:

    您应该使用 gem will_paginate

    安装使用真的很简单:https://github.com/mislav/will_paginate/wiki/installation

    用法示例:http://github.com/mislav/will_paginate

    【讨论】:

      【解决方案2】:

      查看will_paginate Gem。

      在 ActiveRecord 模型上进行分页非常容易:

      @posts = Post.paginate :page => params[:page], :order => 'created_at DESC'
      

      在视图中,页面链接可以使用单个视图助手呈现:

      <%= will_paginate @posts %>
      

      【讨论】:

      • 既然我是新手,我会问一个愚蠢的问题。我是把第一行代码放在模型还是控制器中。我根据您的回答考虑了模型,但没有奏效。这是我输入的内容: def will_paginate @posts = Post.paginate :page => params[:page], :order => 'created_at DESC' end
      • 该代码旨在放置在控制器中。如果需要,您还可以在模型中使用 #paginate 方法来创建自定义方法。
      • 好的,谢谢。从 errtheblog.com 安装插件时遇到问题
      • 通过 RubyGems 将插件作为 gem 安装是最简单的。
      【解决方案3】:

      will_paginate 绝对是要走的路,我只是想添加一个指向railscasts will_paginate video 的链接,向您展示如何使用它,因为有时这比阅读文档更容易学习基础知识。另外,您将了解分页作为 Rails 包含的一部分时如何完成的简史(它更慢且更麻烦)。旧的经典分页也已移出到它自己的插件中,但仅当您将 Rails 升级到他们将其移除的版本时,才建议您使用它。

      Railscasts 有大量其他精彩视频,您可能会觉得有帮助。例如,一旦你变得更高级,你可能想试试ajax pagination

      【讨论】:

        【解决方案4】:

        我在使用“will_paginate”时遇到了问题,安装 GEM 然后卸载……一个真正的问题!所以我决定在 RoR 上编程分页,这并不难,所以我想分享一下我所做的:

        控制器:

          def index
        #how many register per page i want to show
            @b = 30 
        #params via GET from URL
            a = params[:page].to_i
        #first register per page
            a1 = params[:page].to_i * @b
        #the query can be easy...
            @callcenters = Income.all(:joins => "LEFT JOIN radcheck ON radcheck.id = incomes.radcheck_id", :order => "created_at DESC",:limit => "#{a1},#{@b}", :select => "radcheck.username as clave,caller_id, created_at, value")
        #I need to know how many pages somehow
             @registrostotales = Income.all(:joins => "LEFT JOIN radcheck ON radcheck.id = incomes.radcheck_id", :select => "radcheck.username as clave,caller_id, created_at, value").count
        
            respond_to do |format|
              format.html # index.html.erb
              format.xml  { render :xml => @callcenters }
            end
          end
        

        查看:

        ...
        Total de registros: <%= numero = @registrostotales %><br/><br/>
        <!-- total pages -->
        <% pages = @registrostotales / @b %>
        <!-- the last page -->
        <% if pages % @b > 0 %><% pages = pages + 1 %><% end %>
        
        Paginas:
        <% (0..(pages-1)).each do |i| %>
        <!-- href or link_to, http://xxxxxxxx/yyyy?page=i -->
          <%= link_to i+1, :action => "index", :controller => "callcenters", :page => i %>
        <% end %>
        
        
        <!-- the view.. -->
        <table>
          <tr>
            <th>#</th>
            <th>Tel&eacute;fono (ID)</th>
            <th>Zona</th>
          </tr>
        
        <% @callcenters.each do |callcenter| %>
          <tr>
            <td><%= numero - params[:page].to_i * 30 %><% numero = numero  - 1 %></td>
            <td><%= callcenter.caller_id %></td>
            <td><%= Node.first(:conditions => {:calling_id => callcenter.caller_id}).description %></td>
          </tr>
        <% end %>
        </table>
        

        我希望这对某人有所帮助!

        【讨论】:

          【解决方案5】:

          我们可以使用 'will_paginate-bootstrap' gem 轻松做到这一点。

          1. 要继续,首先在 gem 文件中添加一行,

            gem 'will_paginate-bootstrap'.

            现在运行捆绑安装。

          2. 在控制器中,您将使用@post = Post.all 来获取 模型的内容。 而是使用这个

          @post = Post.paginate(:page=&gt;params[:page],per_page:5)

          这里在上面一行per_page字段是指定你需要多少条记录 在一个页面中。

          1. 在 index.html.erb 中 在代码的末尾,即在结束 body 标签之前 添加这个,

          &lt;%= will_paginate @post,renderer: BootstrapPagination::Rails %&gt;

          注意:我认为 Post 是模态的,而 post 是控制器中声明的变量。 只需使用您的变量即可。

          【讨论】:

          • 请使用语法高亮!
          • 好的。完成了
          • gem 超过 4 年没有维护!
          【解决方案6】:

          为 Ruby on Rails 应用程序添加分页

          要将分页添加到您的 Ruby on Rails 应用程序,您必须修改以下文件:

          宝石文件:

          gem 'will_paginate', '~> 3.1.0'
          gem 'will_paginate-bootstrap'
          

          区域控制器 --> 索引

          @areas = Area.pagination_request(params[:page])
          

          index.html.erb

          <%= will_paginate @areas, renderer: BootstrapPagination::Rails %>
          

          模型文件:

          def self.pagination_request(page)
              paginate :per_page => 10, :page => page
          end
          

          【讨论】:

          • will_paginate-bootstrap 不再维护,最后一次提交是在 07.11.2016
          【解决方案7】:

          您可以使用 kaminari 宝石。

          非常易于使用和高度定制友好。

          【讨论】:

            【解决方案8】:

            或者,小型、快速且积极维护:Pagy

            【讨论】:

              猜你喜欢
              • 2010-12-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多