0

我正在關注Ryan Bates的railcasts:http://railscasts.com/episodes/37-simple-search-form 解決了我的問題,在頁面上使用will-paginate進行搜索。如何實現與paginate結合使用的簡單搜索表單?

在這裏他回答瞭如何解決這個問題的問題。不過,我已經嘗試過,並沒有任何運氣。從他的第二個解決方案開始,我得到了一個N​​oMethod錯誤,作爲結果「search_conditions」。

驗證碼:

projects/index.rhtml 
<% form_tag projects_path, :method => 'get' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

projects_controller.rb 
def index 
    @projects = Project.search(params[:search]) 
end 

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

他的答案:

一種方法是調用類的方法「search_conditions」,而是有它做的發現它只會返回一個條件,數組,所以你能在paginate方法中使用它。

Course.paginate(:所有,:條件=> Course.search_conditions(..))

另一個是調用方法 「paginated_search」,並將它稱爲 「分頁」 而不是 「找到」。

最後,您可以讓搜索方法接受使用with_scope設置查找條件的塊。通過這種方式,您可以在該塊中調用「分頁」,並自動應用條件。

有人可以向我解釋我應該如何解決這個問題嗎?我是新來的鐵桿,也許我只是誤解他在說什麼。

回答

3

Railscast你跟隨是相當古老,從那時起很多變化。嘗試這樣的改變search方法的實現:

def self.search(search) 
    if search 
    where 'name LIKE ?', "%#{search}%" 
    else 
    scoped 
    end 
end 

像這樣的東西在控制器:

def index 
    @projects = Project.search(params[:search]).paginate(:page => params[:page]) 
end 
+0

卡哦!這工作完美!謝謝! – Tony

+0

而不是實現像思維獅身人面像這樣的系統,是否可以更改用戶可以搜索數據庫中所有字符串/列實例的代碼?例如'哪裏'一年?',「%#{search}%」'允許我搜索字符串「year」(但僅限那個字符串)。但是,我希望搜索在單個搜索中查找「年」和「名稱」,並添加其他字符串。 – Tony

+2

@Tony是的,有可能:'where'year LIKE:search OR name LIKE:search',:search =>「%#{search}%」' –