Rails 5中每页显示的数据库结果数量限制?

问题描述 投票:0回答:2

我目前正在参加Rails课程,并且在索引页面上正在显示数据库中存储的所有电影。理想情况下,我希望将其限制为仅显示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
ruby-on-rails ruby sqlite limit truncate
2个回答
0
投票

您可以使用:

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

Movie.limit(per_page).offset(page)

pagination gem


0
投票

您可以使用Kaminari宝石。 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) %>
© www.soinside.com 2019 - 2024. All rights reserved.