2010-04-06 44 views
0

我有一個事件模型,其中包含各種信息,例如日期,位置和發生了什麼的描述。Rails - 搜索多個文本框和字段

我想爲我的用戶能夠通過一組不同的文本框,通過事件列表進行搜索,但有一個困難時期我得到的語法恰到好處

在我看來,我有...

<% form_tag users_path, :method => 'get' do %> 
(<%= text_field_tag :search_keyword, params[:search_keyword] %>) + 
(<%= text_field_tag :search_zip, params[:search_zip] %>) 
<%= submit_tag "Find Events!", :name => nil %> 
<% end %> 

,並在控制器中,我試圖通過成績查詢....

if params[:search_keyword] 
    @events = Event.find(:all, :conditions => [' name LIKE ? ',  "%#{params[:search_keyword]}%"]) 
elsif params[:search_zip] 
    @events = Event.find(:all, :origin=> params[:search_zip], :within=>50) 
else 
      @events = Event.find(:all) 
    end 

我如何代碼,以便它只會如果文本框的心不是空執行搜索?

如果兩個文本框都填充了,那麼@events應該是兩個查詢的結果? 如果不知道這是否會工作=>(??? @ event = @ event + event.find ..... ???

回答

1

在這種情況下,參數將始終爲:search_keyword:search_zip,但值。將空/零/空,這樣做這樣的事情:

if !params[:search_keyword].blank? && !params[:search_zip].blank? 
    # build query for both 
elsif !params[:search_keyword].blank? 
    # build for keyword 
elsif !params[:search_zip].blank? 
    # build for zip 
else 
    # all 
end 
+0

任何人都可以想辦法爲許多可選字段做到這一點,更多的可能是零搜索參數,我們有更糟糕的這種做法是 – light24bulbs 2013-05-21 19:57:58