私は、各会場がエリアとタイプに属している会場モデルを持っています。私はインデックスページ上のチェックボックスで構成された2つのフォームを持っていて、どのタイプまたはエリアに属している会場記録をフィルタリングすることができます。しかし、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
次に領域のみをフォームが動作します。フォームから領域と種類を選択してクリックした後
<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>
:に
def index
@venues = Venue.all(:conditions => {:venuetype_id => params[:venuetypes]}&&{:area_id => params[:areas]})
end
ビュー:IVEは読み取るためのコントローラを変更
EDIT
送信ボタンをクリックすると、URLに「/ venues?areas [] = 2 & venuetypes [] = 13」と表示されますが、領域ごとの結果のみをフィルタリングしています入力しないでください。
ありがとうございました。検索クエリを構築するための
ものを使用してについてのORクエリでは? 2つの利得:1つのクエリ、1つの変数 – apneadiving
'venuetypes'と' areas'パラメータの両方がサーバに送られるように、2つではなく1つのフォームだけを作るべきです。 –
私はたぶん、venuの型とエリアIDをスコープに入れます。そうすれば、必要に応じて1つの行に簡単に組み合わせることができます。スコープにロジックを追加することもできます: 'scope:with_venu_type、:conditions => lambda {| x | x.nil? ? {}:{:venutype_id => x}} ' –