0

このページに検索フォームがあります。

http://staging-checkpointtracker.aptanacloud.com/events

ドロップダウンから状態を選択すると、1つ以上のイベント部門(チェックボックス)を選択しなかったため、結果はゼロになります。

私が欲しいのは、ページが最初に読み込まれるときにチェックボックスをデフォルトで「チェック」に設定することです...すべての部門のイベントを表示するために...しかし、ユーザーが行った変更をフィルタリング時に反映させたいです。

イベントコントローラのインデックスメソッドは次のとおりです。

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 %>
4

1 に答える 1

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デフォルトでチェックされているチェックボックスを追加します。searchチェックボックスとカスタムメソッドの状態を管理するためのJavaScriptを少し。

于 2010-04-21T15:14:58.037 に答える