Ruby 中分页功能的实现
2017-01-04 16:57
239 查看
需求分析:实现两种分页方式:
1.将从数据库中得到的数据进行筛选,筛选后的数据保存在数组之中,然后将数组中的元素在前台展示出来。举例:学生在选择课程的时候只能选择自己没有选修过的课程,已经选修的不能查看,因此需要将所有的课程从数据库中读出来以后减去已经选修的。
2.将需要的数据从数据库中全部查出来,然后将所有的数据显示出来。举例:学生查看自己所有已经选择的课程,从数据库中查出来以后就可以直接在前台显示了。
第一种情况实现:
第一种情况下rails没有可以直接调用的方法,因此需要自己写。
首先在控制器中将所有的数据进行分页,存在不同的数组中,注意数组的边界。
修改view中的文件:
第二种情况可以直接调用框架里面的方法。
首先在Gemfile中添加:gem will_paginate,然后在终端内输入 bundle install.
修改控制器文件:
修改视图文件:
这样就可以实现每页显示五个,效果如下:
PS:rails框架真是强大啊
1.将从数据库中得到的数据进行筛选,筛选后的数据保存在数组之中,然后将数组中的元素在前台展示出来。举例:学生在选择课程的时候只能选择自己没有选修过的课程,已经选修的不能查看,因此需要将所有的课程从数据库中读出来以后减去已经选修的。
2.将需要的数据从数据库中全部查出来,然后将所有的数据显示出来。举例:学生查看自己所有已经选择的课程,从数据库中查出来以后就可以直接在前台显示了。
第一种情况实现:
第一种情况下rails没有可以直接调用的方法,因此需要自己写。
首先在控制器中将所有的数据进行分页,存在不同的数组中,注意数组的边界。
#------------分页--------------------- total = @course.count params[:total] = total if params[:page] == nil params[:page] = 1 #进行初始化 end if total % $PageSize == 0 params[:pageNum] = total / $PageSize else params[:pageNum] = total / $PageSize + 1 end #计算分页的开始和结束位置 params[:pageStart] = (params[:page].to_i - 1) * $PageSize if params[:pageStart].to_i + $PageSize <= params[:total].to_i params[:pageEnd] = params[:pageStart].to_i + $PageSize - 1 else params[:pageEnd] = params[:total].to_i - 1 #最后一页 end #---------------------------------------------------------------------
修改view中的文件:
<tbody> <% (params[:pageStart]..params[:pageEnd]).each do |i| %> <tr> <td><%= i+1 %></td> <td><%= @course[i].course_code %></td> <td><%= @course[i].name %></td> <td><%= @course[i].credit %></td> <td><%= @course[i].limit_num %></td> <td><%= @course[i].student_num %></td> <td><%= @course[i].course_type %></td> <td><%= @course[i].teaching_type %></td> <td><%= @course[i].exam_type %></td> <td><%= @course[i].teacher.name %></td> <td><%= link_to "加入课程", select_course_path(@course[i]), class: 'btn-sm btn-info' %></td> </tr> <% end %> </tbody>
<%#----------分页---------%> <div id="nav"> <input type="hidden" name="page" value=<%= params[:page]%>> <nav style="text-align: center"> <ul class="pagination"> <% if params[:page].to_i == 1%> <li class="disabled"><a>首页</a></li> <li class="disabled"><a>上一页</a></li> <% else %> <li><a href=<%= list_courses_path + '?page=1'%> >首页</a></li> <li><a href=<%= list_courses_path + '?page='+(params[:page].to_i - 1).to_s %>>上一页</a></li> <% end %> <li class="disabled"><a>当前为第<%= params[:page] %>页 共<%= params[:pageNum] %>页</a></li> <% if params[:page].to_i == params[:pageNum]%> <li class="disabled"><a>下一页</a></li> <li class="disabled"><a>末页</a></li> <% else %> <li><a href=<%= list_courses_path + '?page=' + (params[:page].to_i + 1).to_s %> >下一页</a></li> <li><a href=<%= list_courses_path + '?page=' + params[:pageNum].to_s %>>末页</a></li> <% end %> </ul> </nav> </div>
第二种情况可以直接调用框架里面的方法。
首先在Gemfile中添加:gem will_paginate,然后在终端内输入 bundle install.
gem 'will_paginate'
修改控制器文件:
@course=current_user.courses.paginate(:page=>params[:page],:per_page=>5)
修改视图文件:
<%= will_paginate @course %>
这样就可以实现每页显示五个,效果如下:
PS:rails框架真是强大啊
相关文章推荐
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 使用xml绑定实现分页功能
- extremetable+hibernate实现分页 关于结合hibernate后台数据分页和eXtremeTable分页功能的使用
- 用SQL 2005的ROW_NUMBER() 实现分页功能
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 使用Spring的JdbcTemplate实现分页功能
- 仅用xsl和asp实现分页功能
- 用SQL 2005的ROW_NUMBER() 实现分页功能
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页[转]
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用The Pager Tag Library 实现分页功能
- JS+DOM+XML实现分页功能
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页