2011-09-16 36 views
0

我有一個Users的索引頁面,我想用MetaSearch使用搜索表單進行過濾。然而,當我點擊複選框時,我想要搜索的值被存儲爲字符串。例如,這裏有一個形式,我想申請到整合檢索:是否可以在複選框上使用MetaSearch來獲取字符串?

<% form_for(current_user.profile) do |f| %> 
<table id="careerCriteria"> 
    <tr> 
    <td class="normal"><%= current_user.profile.hometown %></td> 
    <td><%= check_box_tag :hometown %></td> 
    </tr> 
    <tr> 
    <td class="normal"><%= current_user.profile.current_city %></td> 
    <td><%= check_box_tag :current_city %></td> 
    </tr> 
    <tr> 
    <td class="normal"><%= current_user.profile.past_city %></td> 
    <td><%= check_box_tag :past_city %></td> 
    </tr> 
</table> 
<% end %> 

我的用戶模型:

class User < ActiveRecord::Base 
    has_one :profile, :dependent => :destroy 
end 

我不想使用搜索按鈕。我想要在複選框(或複選框)被點擊時應用過濾器。我是新手編程,所以任何幫助將不勝感激!

回答

1

您需要一個小小的ajax &查詢來完成此操作。

這是一篇很好的文章,向您展示如何使複選框提交表單。

http://trevorturk.com/2010/08/24/easy-ajax-forms-with-rails-3-and-jquery/

什麼你想要做的是建立在處理搜索控制器的動作。以下是一個搜索動作的示例...

def search 
    if params[:term].blank? 
     raise "You must provide search criteria." 
    end 

    params[:term] = "%#{params[:term]}%" 
    conditions = " Description LIKE :term" 

    @careers = Career.all(
     :conditions => [conditions, params], 
     :offset  => params[:offset], 
     :limit  => params[:limit] 
    ) 

    respond_with @careers 
end 

您還需要爲此操作的搜索設置路由。

resources :careers do 
    get "search/:term/:offset/:limit.:format", :action => "search", :constraints => { :offset => /\d+/, :limit => /\d+/ } 
end 

一旦你得到表單提交給這個動作,你應該可以使用jQuery來更新結果。

現在請記住,如果您不想使用Ajax &加載可以這樣做的結果,那麼您只需將遠程操作從表單標記中移出,並且它將刷新整個頁面。

+0

謝謝,但我將如何搜索使用多個術語?我想讓這個機會通過許多不同的術語進行過濾。例如,家鄉,current_city,past_city。 – tvalent2

+0

您需要在模型中使用範圍。這裏有一個鏈接給你一個概述。它還具有向您展示如何完成您正在尋找的功能的好處:http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny- on-scopes-formerly-named-scope/index.html – Altonymous

+0

非常感謝您的幫助。我把所有這些我拼湊在一起的東西提出了另一個問題。你能看看並幫我弄清楚如何將它們連接起來嗎? http://stackoverflow.com/questions/7466123/form-filter-on-index-page-using-cross-model-scope – tvalent2

相關問題