LoginSignup
4
4

More than 5 years have passed since last update.

Ruby on Rails ~「ransack」で検索機能を実装(コードメモ)

Posted at

◆ユーザーがイベントを登録していくアプリケーションで、イベントを「イベント名、日時」での検索できるよう実装しました。

今回は「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 %>

を記述し、いつでも検索前の状態に戻れるようにしています。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4