RoR中

2012-03-31 41 views
1

这里添加搜索功能,分页页面的情景:RoR中

我已经这使得组(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 

如何解决这个问题,我怎么做我的搜索表单工作和分页的方式返回结果!

回答

0

这里是最终的答案这一职务。所有需要做的原来的海报是这样的:

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

在离线的讨论,这是行不通的。事实证明,他已经为他的分页准备了宝石和kaminari宝石。 (15)时,他正在放弃。删除will_paginate gem修复它!

will_paginate没有被主动升级,所以如果你有will_paginate,并且你在Rails 3.X上,那么请去掉will_paginate并使用kaminari来代替它,这是一个相当无痛的换出,只是一些CSS工作来格式化分页。

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) 
+0

我在删除逗号后| val |因为它给了我一个错误,但现在它说“未定义的方法的顺序'” – bytebiscuit 2012-03-31 21:45:34

+0

现在删除顺序,并像这样做:@groups = Group.search(params [:search])。page(params [:page]) .per(15)但仍不能正常工作,现在说'undefined method'页面' – bytebiscuit 2012-03-31 22:13:59

+0

什么版本的rails? – RadBrad 2012-03-31 23:29:37