【问题标题】:Rails Kaminari pagination, set record indexRails Kaminari 分页,设置记录索引
【发布时间】:2014-03-07 12:40:08
【问题描述】:

我正在使用 Kaminari 分页 gem 进行分页。我想设置起始页,所以默认页是[0, 1, 2, 3, 4*, 5, 6,...]。

我当前的分页代码:

@event = Event.order(start_date: :asc).page(params[:page]).per(1)
@items = Item.where(event_id: @event.first._id)

我希望显示的第一页是最新事件,因此较旧的事件将是以前的页面,而未来的事件将是下一页。

【问题讨论】:

    标签: ruby-on-rails pagination kamianri


    【解决方案1】:

    一种方法是:

    a) 计算当前日期之前的事件,例如。 previous_events = Event.count(:start_date.lte => DateTime.now.utc)

    b) 计算出涵盖了多少页事件,例如。 previous_pages = previous_events/Event.default_per_page

    c) 放置它以获取您需要开始的页面,例如。 start_page = previous_pages.floor

    然后将其传递到您的控制器代码中:

    @events = Event.order(start_date: :asc).page(start_page)
    

    【讨论】:

      【解决方案2】:

      分页使用的 SQL 查询将LIMIT 1 OFFSET 0 添加到 SQL 语句的末尾。这意味着您的结果集将只有 1 条记录,并且您不会知道当前事件在哪个索引中。您必须做更多的工作才能从所有事件中找到索引,然后将该索引作为 @ 987654322@,即.page()方法。基本上,获取您的事件的all,找到当前事件,然后获取它的索引,并将该索引传递给您的page 方法。这是一些伪代码:

      all_events = Event.order(start_date: :asc).all
      current_event = all_events.detect { |e| e.start_date.to_date == Time.now.to_date }
      index = all_events.index(current_event)
      @events = Event.order(start_date: :asc).page(params[:page] || index).per(1)
      

      这可能足够接近工作。注意:此方法仅适用于您的 LIMIT 为 1,即您对 page 的参数。

      【讨论】:

        【解决方案3】:

        你的问题相当广泛,所以我不确定你在寻找什么。如果您只想设置默认页面,您可以调用类似

        current_page = params[:page] ||= 4  #or whatever you want the default page to be
        
        @event = Event.order(start_date: :asc).page(current_page).per(1)
        

        更新:

        与以下答案类似,您可以使用未来发生的事件来确定您的页面:

        current_page = params[:page] ||= Event.where(:start_date > DateTime.now.utc).count #This will tell you how many events are in the future
        
        @event = Event.order(start_date: :asc).page(current_page).per(1)
        

        【讨论】:

        • 这很接近了!我想选择当前页面,例如Event.where(:start_date.gte => DateTime.now.utc)
        • 所以如果你有 100 个未来事件,你会被设置到第 100 页?
        • 这是设置的方式,是的。每页 1 个事件。当前页面上的今日活动。以及“以前”页面上的未来事件。 “下一页”上的过去事件
        猜你喜欢
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        相关资源
        最近更新 更多