У меня есть модель мест, где каждое место принадлежит к области и типу. У меня есть 2 формы, состоящие из флажков на индексной странице, что позволяет мне фильтровать записи заселения, показываемые либо типом, либо областью, в которой они принадлежат. Однако используется только последняя строка в def 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
Тогда только области формы работ.
РЕДАКТИРОВАТЬ
Ив изменили контроллер следующим образом:
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 выигрыша: 1 запрос, 1 переменная – apneadiving
Вы должны также сделать только одну форму вместо двух, так что оба параметра 'venuetypes' и' areas' отправляются на сервер. –
Я бы, наверное, просто ввел тип Venu и идентификатор области в области. Таким образом, вы можете легко комбинировать их, если необходимо, в одну строку, фильтруя как типы Venu, так и область или оба. Вы даже можете добавить логику в область действия: «scope: with_venu_type,: conditions => lambda {| x | x.nil? ? {}: {: venutype_id => x}} ' –