条件を保持するpagination

モデル(Memo)に検索をするアクション

def search
    @memo = Memo.new(params[:memo])
    @memo_pages, @memos = paginate :memos, :per_page => 10, :conditions => ["memo like ?", "%#{params[:memo][:memo]}%"]
    render :action => 'list'
end

listビューのpagination記述はこんな感じ

<h1>Listing memos</h1>
<% form_tag({:action => 'search'}, {:method => :get}) do %>
  <%= text_field :memo, :memo %>
  <%= submit_tag 'Search' %>
<% end %>
<table>
  <tr>
  <% for column in Memo.content_columns %>
    <th><%= column.human_name %></th>
  <% end %>
  </tr>
  
<% for memo in @memos %>
  <tr>
  <% for column in Memo.content_columns %>
    <td><%=h memo.send(column.name) %></td>
  <% end %>
    <td><%= link_to 'Show', :action => 'show', :id => memo %></td>
    <td><%= link_to 'Edit', :action => 'edit', :id => memo %></td>
    <td><%= link_to 'Destroy', { :action => 'destroy', :id => memo }, :confirm => 'Are you sure?', :method => :post %></td>
  </tr>
<% end %>
</table>

<% search_params = Hash[*params[:memo].collect {|k,v| ["memo[#{k.to_s}]", v]}.flatten] unless params[:memo].nil? %>
<%= pagination_links @memo_pages, :params => search_params %>

<br />

<%= link_to 'New memo', :action => 'new' %>

以上で検索条件を保持するページネーションができる。