我在这个页面上有一个搜索表单:
http://staging-checkpointtracker.aptanacloud.com/events
如果从下拉列表中选择一个状态,则结果为零,因为您没有选择一个或多个事件部门(复选框)。
我想要的是在页面首次加载时将复选框默认为“已选中”...以显示所有分区中的事件...但我希望用户进行的更改在过滤时反映出来。
这是我的事件控制器中的索引方法:
def index
@search = Event.search(params[:search])
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @events }
end
end
这是我的搜索表单:
<% form_for @search do |f| %>
<div>
<%= f.label :state_is, "State" %> <%= f.select :state_is, ['AK','AL','AR','AZ','CA','CO','CT','DC','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY'], :include_blank => true %>
</div>
<div>
<%= f.check_box :division_like_any, {:name => "search[:division_like_any][]"}, "Sprint", :checked => true %> Sprint (2+ hours)<br/>
<%= f.check_box :division_like_any, {:name => "search[:division_like_any][]"}, "Sport" %> Sport (12+ hours)<br/>
<%= f.check_box :division_like_any, {:name => "search[:division_like_any][]"}, "Adventure" %> Adventure (18+ hours)<br/>
<%= f.check_box :division_like_any, {:name => "search[:division_like_any][]"}, "Expedition" %> Expedition (48+ hours)<br/>
</div>
<%= f.submit "Find Events" %>
<%= link_to 'Clear', '/events' %>
<% end %>
答案 0 :(得分:1)
有几种方法可以做到这一点,我认为最简单/最快捷的方法是:
@search = Event.search(params[:search] || Event::DEFAULT_SEARCH_PARAMETERS)
在event.rb
中class Event < A:RB
DEFAULT_SEARCH_PARAMETERS = {:state_is => 'NY', :foo => 'bar'} # set your defaults here
end
话虽如此,我不确定这会如何与复选框一起使用。您还可以考虑以下选项之一:
拥有一个SearchSetting
模型,其中包含所有可搜索的参数(如果用户可以保存搜索,或者只是将其保持断开状态,您也可以将其保留给用户)。这将使您的表单更加简单。
添加All Divisions
复选框,默认情况下会选中该复选框。一些javascript来管理复选框的状态和自定义search
方法。