Ограничить количество результатов базы данных, отображаемых на странице в Rails 5? - PullRequest
0 голосов
/ 23 января 2020

В настоящее время я прохожу курс рельсов, и на странице указателя отображаются все фильмы, хранящиеся в базе данных. В идеале я хотел бы ограничить это показом только 5 фильмов и иметь навигационную кнопку внизу, позволяющую затем показывать больше фильмов, если это необходимо. Вот код, который у меня есть для фильмов.

index. html .erb

  <% @movies.each do |movie| %>
    <li>
      <article class="movie">
        <header>
          <%= image_for(movie) %>
          <h2><%= link_to movie.title, movie %> (<%= movie.released_on.year %>)</h2>
          <h3><%= movie.cast %></h3>
        </header>
        <p>
          <%= truncate(movie.description, length: 150, separator: ' ') %>
        </p>
        <table>
          <tr>
            <th>Rating</th>
            <td><%= movie.rating %></td>
          </tr>
          <tr>
            <th>Duration</th>
            <td><%= movie.duration %></td>
          </tr>
          <tr>
            <th>Total Gross</th>
            <td><%= format_total_gross(movie) %></td>
          </tr>
        </table>
        <footer>
        </footer>
      </article>
    </li>
  <% end %>
  <%= button_to 'View more', root_path, params: { state: :submitted }%>
</ul> 

контроллер

def index
@movies = Movie.all
end

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы можете использовать камень Каминари. https://github.com/kaminari/kaminari

В контроллере

def index
  @moveis = Movie.page(params[:page]).per(5)
end

В поле зрения

<%= link_to_next_page @movies, 'View more' %>

Вы даже можете достичь этого с помощью собственного кода.

В контроллере

def index
  if params[:previous_page_last_id].present?
    @movies = Moive.where('id < ?', params[:previous_page_last_id]).order('id DESC').limit(5)
  else
    @movies = Moive.order('id DESC').limit(5)
  end
end

В поле зрения

<%= link_to 'View more', movies_path(previous_page_last_id: @moveis.last.id) %>
0 голосов
/ 23 января 2020

Вы можете использовать:

page = params[:page] || 1
per_page = 10

Movie.limit(per_page).offset(page)

Или камень для нумерации страниц .

...