will_paginate 搜索结果分页

will_paginate 搜索结果分页
Rails分页plugin之will_paginate
搜索结果的分页显示是一个常用功能,实现方式有很多中,rails也内建了对分页的支持,但是rails2.0将去掉分页组件,将分页功能交给 plugin去实现,这里通过一个简单的例子展示如何使用最流行的rails分页plugin -- will_paginate.

1.安装will_paginate,编写分页代码
安装:

ruby script\plugin install svn://errtheblog.com/svn/plugins/will_paginate安装成功后,开始编写分页代码

修改products_controller.rb,找到index方法
Rails代码
@products = Product.paginate  :page => params[:page],  
                              :per_page => 5

    @products = Product.paginate  :page => params[:page],
                                  :per_page => 5
保存加入翻页,修改app/view/products/index.rhtml,在最后加入一行
Rails代码
<%= will_paginate @products %>

<%= will_paginate @products %>
写好后打开页面即可看到看到现在显示前5个产品了和翻页了,试着点击next,previous进行翻页
Rails代码
<%= will_paginate @products,:prev_label=> '上一页',:next_label=> '下一页' %>

<%= will_paginate @products,:prev_label=> '上一页',:next_label=> '下一页' %>可定义上下翻页显示

4.加入搜索
在index.rhtml适当位置加入:
Rails代码
<% form_tag products_path, :method => 'get' do %> 
  <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
  </p> 
<% end %>

<% form_tag products_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>
这里注意,:method => 'get'必须指定, submit_tag的:name属性设为nil,避免在url中出现不必要的内容

将products_controller.rb的index方法修改为
Rails代码
@products = Product.paginate  :page => params[:page],  
                               :per_page => 5, 
                               :conditions => ["name like ?", "%#{params[:search]}%"]

   @products = Product.paginate  :page => params[:page],
                                  :per_page => 5,
                                  :conditions => ["name like ?", "%#{params[:search]}%"]注意在加入搜索条件时的写法,这样可以避免sql注入,提高安全性

试着进行搜索,可以看到搜索结果很好的进行了分页.
在此还提供一些分页统计信息
Rails代码
统计信息: 
共<%[email protected]_entries%>条, 共<%[email protected]_count %>页,当前第<%= @products.current_page%>页. 

你可能感兴趣的:(sql,SVN,Ruby,Rails)