【问题标题】:Rails: Showing 10 or 20 or 50 results per page with will_paginate how to?Rails:使用 will_paginate 每页显示 10 或 20 或 50 个结果如何?
【发布时间】:2012-04-28 20:38:16
【问题描述】:

又是我……

我需要使用 will_paginate 插件在我的帖子列表中显示 10 或 20 或 50 个结果,并在我的帖子列表中选择选项

你能帮帮我吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails will-paginate


    【解决方案1】:

    看起来 OP 也在这里问过:http://railsforum.com/viewtopic.php?id=33793 并得到了更好的答案。

    为了适应那里的最佳解决方案,这是我喜欢的:

    (在视图中)

    <%= select_tag :per_page, options_for_select([10,20,50], params[:per_page].to_i),
           :onchange => "if(this.value){window.location='?per_page='+this.value;}" %>
    

    (在控制器中)

    @per_page = params[:per_page] || Post.per_page || 20
    @posts = Post.paginate( :per_page => @per_page, :page => params[:page])
    

    【讨论】:

    • 感谢您的示例 - 这正是我在 Rails 3 项目中所需要的。不过有一个提示……您可能希望将 select_tag 中“params[:per_page].to_i”的部分更改为“@per_page”,因为我们已经从控制器中知道了@per_page。即使没有 per_page 参数(例如 index 操作),此更改也可确保在您的 select 标记中选择正确的值。
    【解决方案2】:

    设置类范围的默认值

    class Post < ActiveRecord::Base
    
      def self.per_page
        25
      end
    
    end
    

    或者在逐个查询的基础上在您的通话中使用 per_page

    class Post <ActiveRecord::Base
    
      def self.posts_by_paginate
        paginate(:all, :per_page => 25, :conditions => ["published = ?", true])
      end
    
    end
    

    【讨论】:

      【解决方案3】:

      这就是我要做的事情

      Class UsersController < ApplicationController
          def index
              @users = User.paginate(:all, :page => params[:page], :per_page => params[:number_of_records])
          end
      end
      

      【讨论】:

      • 如果 OP 希望确保每页选项只有 10、20 和 50 个有效,您可以扩展此方法以强制执行该约束。像 ['10', '20', '50'].include?(params[:page])
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多