【问题标题】:Is it possible to combine will_paginate with find_by_sql?是否可以将 will_paginate 与 find_by_sql 结合使用?
【发布时间】:2011-02-01 21:54:44
【问题描述】:

在我的 Rails 应用程序中,我想使用 will_paginate gem 对我的 SQL 查询进行分页。那可能吗?我尝试做这样的事情,但没有奏效:

@users = User.find_by_sql("
    SELECT u.id, u.first_name, u.last_name, 
     CASE 
      WHEN r.user_accepted =1 AND (r.friend_accepted =0 || r.friend_accepted IS NULL)
       .........").paginate(
                  :page => @page, :per_page => @per_page, 
                  :conditions => conditions_hash,
                  :order => 'first_name ASC')

如果没有,您能推荐一种解决方法吗?我不想自己写分页。

【问题讨论】:

    标签: ruby-on-rails will-paginate find-by-sql


    【解决方案1】:

    使用paginate_by_sql,即

    sql = " SELECT * 
            FROM   users
            WHERE  created_at >= ?
            ORDER  BY created_at DESC "
    
    @users = User.paginate_by_sql(
      [sql, 2.weeks.ago],
      page: @page,
      per_page: @per_page
    )
    

    作为一般规则,任何查找器都可以通过将find* 替换为paginate* 来进行分页。

    【讨论】:

    • 带绑定:paginate_by_sql([sql, binds], page: # etc..
    【解决方案2】:

    User.paginate_by_sql(sql, :page => params[:page], :per_page => 10)

    【讨论】:

      【解决方案3】:

      试试这个:

      @users = User.find_by_sql 
      @users = @users.paginate
      

      您使用的是什么 will_paginate 和 rails 版本?

      【讨论】:

      • 在您的解决方案中,分页应用于find_by_sql 返回的结果集。因此,您可能必须处理大型结果集,因此系统必须执行冗余计算。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2015-01-02
      • 2019-02-15
      • 2020-09-17
      • 2019-11-06
      • 1970-01-01
      相关资源
      最近更新 更多