您的位置:首页 > 编程语言 > Ruby

Ruby 中分页功能的实现

2017-01-04 16:57 239 查看
需求分析:实现两种分页方式:

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框架真是强大啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: