Paginate without a gem Weiter, Zurück, Schaltflächen für Name.order (: id) .limit (10) .offset (0)
Ich suche seit über einer Woche nach einer Lösung für mein Problem. Ich habe eine Aufgabe, bei der ich 10 Punkte verloren habe, weil ich keine next / prev-Funktionalität hatte und keine Zeit mehr hatte. Ich möchte das trotzdem herausfinden.
Ich habe eine kurze Seite mit @ erstellrails generate scaffold Ripple name:string message:text url:string
zeigt einen Index der 10 neuesten Beiträge an (Name, Nachricht, Erstellt am, Link zu "Anzeigen"). Ich muss noch die nächsten, vorherigen, neuesten und ältesten Links erstellen, um die nächsten 10, vorherigen 10 ... Ergebnisse anzuzeigen. Mein Code.
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>
Und ich habe versucht, Methoden in Model aufzurufen, erhalte aber weiterhinundefined method "next" for #<Class:0xb4eabd0c>
Fehler beim nächsten und vorherigen.
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
Wie würde ich next und previous implementieren, indem ich order (). Limit (). Offset verwende und vielleicht @ verwend@page
, um zu verfolgen, wo ich mich im ActiveRecord befinde. Vielleicht so etwas wie
def next_button
@page -= 1
end
das kann ich im Index aufrufen"<%= link_to Next 10" next_button %>
so oder so habe ich keine Ideen, die funktionieren könnten.
ielen Dank für jede Hilf