【问题标题】:Limit number of database results shown per page in Rails 5?限制 Rails 5 中每页显示的数据库结果数?
【发布时间】:2020-05-09 23:37:33
【问题描述】:

我目前正在学习 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


    【解决方案1】:

    您可以使用 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) %>
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      page = params[:page] || 1
      per_page = 10
      
      Movie.limit(per_page).offset(page)
      

      pagination gem

      【讨论】:

      • 你将如何增加按钮内的页面变量。 &lt;%= link_to 'View more', movie_page_path(2) %&gt;路线get 'movies/pages/:page' =&gt; 'movies#index', as: :movie_page
      • 您可以在返回params.fetch(:page, 1) 的控制器中公开helper_method,然后在视图page + 1 中公开一个helper_method,但如果没有额外的SQL 查询,您将不知道哪个是最后一页获取总记录数。这就是为什么最好使用分页 gem。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2021-03-31
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多