将搜索功能添加到RoR中的分页页面

时间:2012-03-31 21:15:45

标签: ruby-on-rails ruby

以下是该方案:

我有一个表格,其中包含一个分组列表(ID,标题,描述等),如下面的分页,它还有一个搜索表单:

<div id="navigation" style="background:white;border:1px outset cadetblue;">
<p>
  <% form_tag groups_path, :method => 'get' do %>
  <p> 
   <%= text_field_tag :search, params[:search]  %>
    <%= submit_tag "Search", :name => nil %>
   </p>
<% end %>
</p> 
</div>
<table>
.....
</table>
<%= paginate @groups %>

在我的groups_controller.rb中,我有:

@groups = Group.search(params[:search])
@groups = Group.order("id").page(params[:page]).per(15)

似乎没有用。分页有效,但是当我点击时 搜索按钮它什么也没做。 搜索功能在group.rb模型中实现:

def self.search(search)
   if search
    find(:all, :conditions => ['description LIKE ?', "%#{search}%"])
   else
    find(:all)
   end
end

如何解决此问题,如何使搜索表单工作并以分页方式返回结果!

2 个答案:

答案 0 :(得分:0)

你需要将这两个调用合二为一,现在你用第二个覆盖@groups的第一个设置。

我会为您的群组模型添加范围

class Group
  scope :search, lambda { |val| , find(:all, :conditions=>['description LIKE ?', "%#{val}%"]) }
end

然后你可以做

@groups = Group.search(params[:search]).order("id").page(params[:page]).per(15)

答案 1 :(得分:0)

这是这篇文章的最终答案。所有原始海报需要做的是:

@groups = Group.where("description LIKE '%#{params[:search]}%'").order('id').page(params[:page]).per(15)

在离线讨论中,它无效。事实证明他有两个宝石和kaminari宝石为他的分页。当谈到.per(15)时,他正在走出去。删除will_paginate gem修复了它!

will_paginate没有被主动升级,所以如果你有will_paginate并且你在Rails 3.X上,摆脱will_paginate而不是使用kaminari,这是一个相当轻松的交换,只需要一些css工作来格式化分页。