首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

怎样用will_paginate对搜索结果进展分页

2014-03-19 
怎样用will_paginate对搜索结果进行分页?我想用Rails的will_paginate插件来对搜索结果进行分页。控制器如下

怎样用will_paginate对搜索结果进行分页?
我想用Rails的will_paginate插件来对搜索结果进行分页。
控制器如下:(只有两个action)


class CatalogController < ApplicationController

  def index
  @page_title="Book List"
   @books=Book.paginate(:page=>params[:page], :per_page=>1) 
  end


  def search

  @page_title="Search"
  if params[:commit]=="Search" || params[:q]
  @books=Book.find_with_ferret(params[:q].to_s.upcase)
  unless @books.size > 0
  flash.now[:notice]="No books found matching your criteria"
  end
  end
  end


end

在index这个action里,will_paginate能够很好地对Book模型进行分页。
index所对应的index.html.erb如下:

<h1>Listing books</h1>
<%=will_paginate @books %> # works well!
<table>
  <tr>
    <th>Title</th>
    <th>Publisher</th>
    <th>Published at</th>
    <th>Isbn</th>
    <th>Blurb</th>
    <th>Page count</th>
    <th>Price</th>
  </tr>

  <% @books.each do |book| %>
  <tr>
    <td><%=h book.title %></td>
    <td><%=h book.publisher.name %></td>
    <td><%=h book.published_at %></td>
    <td><%=h book.isbn %></td>
    <td><%=h book.blurb %></td>
    <td><%=h book.page_count %></td>
    <td><%=h book.price %></td>
    <td><%= link_to 'Show', book %></td>
    <td><%= link_to 'Edit', edit_book_path(book) %></td>
    <td><%= link_to 'Destroy', book, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

接下来怎么样实现搜索结果的分页?
Search.html.erb如下:

<%=form_tag({:action=>"search"}, {:method=>"get"}) %>
<%=text_field_tag :q %>
<%=submit_tag "Search" %>
</form>

<% if @books %>
<%=will_paginate @books %> #没有效果
<p>Your search "<%=params[:q] %>" produced
<%=pluralize @books.size, "result" %>:</p>

        <dl id="books">
<% for book in @books %>
<dt><%=link_to book.title, :action=>"show", :id=>book %></dt>
<% for author in book.authors %>
<dd><%=author.last_name %>, <%=author.first_name %></dd>
<% end %>
<dd><%=pluralize(book.page_count, "page") %></dd>
<dd>Price: $<%=book.price %></dd>
<dd><small>Publisher: <%=book.publisher.name %></small></dd>
<% end %>
</dl>


<% end %>

[解决办法]
根据错误提示检查你的字段,我只是举例,你要搜索字段是什么就替换什么.

q是你的表的字段名:

@books=Book.paginate :conditions => ["q = ?", params[:q].to_s.upcase]
[解决办法]

引用:
在search方法中,将
@books=Book.find_with_ferret(params[:q].to_s.upcase)
换成:
@books=Book.paginate(:page=>params[:page], :per_page=>1


晕,你加个:conditions=>[“title = ?”,params[:title]],不就有搜索功能了,这里得看搜索什么
[解决办法]
products =  Product.find_with_sphinx(search_word ,
    :sphinx => { :page => params[:page]
[解决办法]
1 , :limit => 100 ,:mode => :any,:weights => [4,10]})
   @products = WillPaginate::Collection.new(params[:page]
[解决办法]
1,  100, sdc_products.total)
   @products.replace products

用 acts_as_sphinx 写的查询,然后分页,

意思是用  find_with_sphinx 找出来,
新建一个 Willpaginate::Collection对象出来, 然后把数据填上

希望对你有帮助

热点排行