RoR中

2012-03-31 28 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