Paginar sin gema Botones Siguiente, Anterior, para Name.order (: id) .limit (10) .offset (0)

Llevo más de una semana buscando una solución a mi problema. Tengo una tarea en la que perdí 10 pts debido a la falta de funcionalidad siguiente / anterior y se me acabó el tiempo. Sin embargo, todavía quiero resolver esto.

He creado un sitio corto de una sola página conrails generate scaffold Ripple name:string message:text url:string que muestra un índice de las 10 publicaciones más recientes (nombre, mensaje, created_on, link_to "show"). Todavía tengo que crear un enlace siguiente, anterior, más nuevo y más antiguo para mostrar los resultados siguientes 10, prev 10 .... Mi código.

app\controllers\ripple_controller.rb

class RipplesController < ApplicationController  
  before_action :set_ripple, only: [:show, :update]  
  before_action :restrict_destroy_edit, only: [:edit, :destroy]   
  before_filter :set_page   
  helper_method :link_name_to_url, :next_button, :previous_button, :newest_button, :oldest_button, :is_next_page_available, :is_previous_page_available

  RIPPLES_PER_PAGE = 10

  def index   
    @ripples = Ripple.order(:id).limit(RIPPLES_PER_PAGE).offset(@page * RIPPLES_PER_PAGE) 
  end
  #All my show, new, destroy, edit, create ....

  def next_button

  end

  def previous_button

  end

  def newest_button

  end

  def oldest_button

  end

  def is_next_page_available?

  end

  def is_previous_page_available?

  end

  def set_page 
    @page = 5 
  end
private
...

\app\views\ripples.html.erb

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Message</th>
      <th>Posted</th>
      <th>Show Ripple</th>
    </tr>
  </thead>

  <tbody>
    <% @ripples.each do |ripple| %>
      <tr>
        <td><%= link_name_to_url ripple %></td>
        <td><%= truncate(ripple.message, length: 50) %></td>
        <td><%= ripple.created_at.strftime("%B %d, %Y %l:%M %P") %></td>
        <td><%= button_to 'Show', ripple, :method => "get" %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<div id = "nav">
  <button><%= link_to 'Newest' %></button>
  <button><%= link_to 'Previous 10 Ripples' %></button>
  <button><%= link_to "Next 10 Ripples" %></button>
  <button><%= link_to 'Oldest' %></button>
  <button><%= link_to 'New Ripple', new_ripple_path, class: "button", method: :get %></button>
</div>

Y he intentado llamar a métodos en Model pero sigo obteniendoundefined method "next" for #<Class:0xb4eabd0c> error en siguiente y anterior.

app\models\ripple.rb

class Ripple < ActiveRecord::Base
  default_scope -> {order(created_at: :desc)}
  validates :name, :message, presence: true
  validates :url, allow_blank: true, format: {
  with: URI::regexp(%w(http https)),
      message: "Must be a url starting with http:// or https://"
  }

  def next
    Ripple.order(:id).limit(10).offset((@page - 1) * 10)
  end

  def previous
    Ripple.order(:id).limit(10).offset((@page + 1) * 10)
  end
end

¿Cómo implementaría siguiente y anterior usando la orden (). Limit (). Offset y tal vez usar@page para realizar un seguimiento de dónde estoy en ActiveRecord. Tal vez algo como

def next_button
  @page -= 1
end

que puedo llamar en el índice"<%= link_to Next 10" next_button %> De cualquier manera, no tengo ideas que puedan funcionar.

Gracias por cualquier ayuda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta