◆ユーザーがイベントを登録していくアプリケーションで、イベントを「イベント名、日時」での検索できるよう実装しました。
今回は「ransack」をインストールすることで、非常に簡単に実装できました。
1.Gemfileに追記しインストール。
gem 'ransack'
$ bundle install
2.コントローラーの編集。
app/controllers/events_controller.rb
def index
@search = Event.search(params[:q])
@events = @search.result.order("created_at ASC")
respond_to do |format|
format.html
format.json { render json: @events }
end
end
3.ビューファイルの編集
app/views/events/index.html.erb
<div>
#1.イベント名、開催場所などのキーワードで検索する場合。
<%= search_form_for @search do |f| %>
<%= f.label :event_name_or_event_location_cont, 'イベント名、開催場所で検索' %>
<%= f.text_field :event_name_or_event_location_cont %>
<%= f.submit 'SEARCH' %>
<br />
#2.日時から検索する際は、date_selectを使用。
<%= f.label :event_date, '開催日時から検索' %>
<%= f.date_select :event_date_gteq, :default => Time.now - 1.month %>〜
<%= f.date_select :event_date_lteq, :default => Time.now + 1.year %>
<%= f.submit 'SEARCH' %>
<br />
<%= link_to '検索条件のクリア', request.path %>
</div>
<% end %>
<%= f.label :event_name_or_event_location_cont, 'イベント名、開催場所で検索' %>
上記のように、「カラム名orカラム名_cont」とすることで、条件に柔軟性を持たせることが可能。今回は、「
event_name」「event_location」のいずれかで検索に引っかかるようにしました。
また、検索条件をクリアする際は、
<%= link_to '検索条件のクリア', request.path %>
を記述し、いつでも検索前の状態に戻れるようにしています。