2011-02-04 92 views
0

我有一個場地模型,每個場地都屬於一個區域和一個類型。我在索引頁上有兩個由複選框組成的表格,允許我過濾由他們屬於哪個類型或區域顯示的場地記錄。然而,只有def索引中的最後一行正在被使用,我怎樣才能將它們組合起來,使兩個表單都處於活動狀態?我如何進行多次搜索?

控制器:

class VenuesController < ApplicationController 

    def index 
    @venues = Venue.all(:conditions => {:area_id => params[:areas]}) 
    @venues = Venue.all(:conditions => {:venuetype_id => params[:venuetypes]}) 
    end 
end 

查看:

<div class="filter_options_container"> 

    <form class="filter_by_area_form", method="get"> 
    <% Area.all.each do |a| %> 
     <%= check_box_tag("areas[]", a.id) %> 
     <%= a.name %> 
    <% end %> 
    <input type="submit" value="Filter" /> 
    </form> 

    <br><br> 

    <form class="filter_by_venuetype_form", method="get"> 
    <% Venuetype.all.each do |v| %> 
     <%= check_box_tag("venuetypes[]", v.id) %> 
     <%= v.name %> 
    <% end %> 
    <input type="submit" value="Filter" /> 
    </form> 
</div> 

<div class="venue_partials_container"> 
    <%= render :partial => 'venue', :collection => @venues %> 
    <div class="clearall"></div> 
    <%= link_to 'add a new venue', new_venue_path, :class => "add_new_venue_button" %> 
</div> 

所以只有venuetype形式的作品,或者如果我改變了高清指數爲:

def index 
    @venues = Venue.all(:conditions => {:venuetype_id => params[:venuetypes]}) 
    @venues = Venue.all(:conditions => {:area_id => params[:areas]}) 
    end 

那麼只有區形式工程。

EDIT

伊夫改變了控制器讀取:

def index 
    @venues = Venue.all(:conditions => {:venuetype_id => params[:venuetypes]}&&{:area_id => params[:areas]}) 
    end 

和視圖:

<div class="filter_options_container"> 
    <form class="filter_form", method="get"> 
    <fieldset class="filter_form_fieldset"> 
     <% Area.all.each do |a| %> 
     <%= check_box_tag("areas[]", a.id) %> 
     <%= a.name %> 
     <% end %> 
    </fieldset><br> 

    <fieldset class="filter_form_fieldset"> 
     <% Venuetype.all.each do |v| %> 
     <%= check_box_tag("venuetypes[]", v.id) %> 
     <%= v.name %> 
     <% end %> 
     <input type="submit" value="Filter" /> 
    </fieldset> 
    </form> 
</div> 

選擇的區域,並且從形式的類型並點擊後提交按鈕的URL顯示「/場地?區域[] = 2 & venuetypes [] = 13」但仍然只過濾區域的結果而不是鍵入。

感謝您的任何幫助。

+2

有關使用或查詢什麼? 2個增益:1個查詢,1個變量 – apneadiving 2011-02-04 23:43:47

+0

您還應該只製作一個而不是兩個,以便將`venuetypes`和`areas`參數發送到服務器。 – 2011-02-04 23:48:05

回答

2

爲構建搜索查詢時,您可以使用scoped

梁2

@venues = Venue.scoped 
@venues = @venues.scoped(:conditions => { :venuetype_id => params[:venuetypes] }) if params[:venuetypes].present? 
@venues = @venues.scoped(:conditions => { :area_id => params[:areas] }) if params[:areas].present? 

如果創建一個名爲範圍像@Steve史密斯建議:

class Venue < ActiveRecord::Base 
    named_scope :with_type, lambda { |types| 
    types.present? ? { :conditions => { :venuetype_id => types } } : {} } 
    named_scope :with_area, lambda { |areas| 
    areas.present? ? { :conditions => { :area_id => areas } } : {} } 
end 

然後你可以簡單地做:

@venues = Venue.with_type(params[:venuetypes]).with_area(params[:areas]) 

的Rails 3

@venues = Venue.scoped 
@venues = @venues.where(:venuetype_id => params[:venuetypes]) if params[:venuetypes].present? 
@venues = @venues.where(:area_id => params[:areas]) if params[:areas].present? 

或者:

class Venue < ActiveRecord::Base 
    scope :with_type, lambda { |types| 
    types.present? ? where(:venuetype_id => types) : scoped } 
    scope :with_area, lambda { |areas| 
    areas.present? ? where(:area_id => areas) : scoped } 
end 

然後,你可以簡單地做:

@venues = Venue.with_type(params[:venuetypes]).with_area(params[:areas])