MyFirstRails

Ransackでの検索機能実装!

概要

Railsにこれから初めて触れる方を対象にしたチュートリアルです

ransackを使用した検索機能のチュートリアルになります

チュートリアル

Railsのひな型を作る

まず、rails newを実行し、Railsアプリのひな型を作成します

rails new ransack

次に、作成したRailsアプリのディレクトリへと移動します

cd ransack

SQLite3のバージョン修正

先ほどのrails newsqlite3のインストールがエラーになっている場合は、以下のようにバージョンを指定してください

gem 'sqlite3', '1.3.13'

その後、bundle installを実行します

bundle install

Scaffoldで検索するモデルとCRUDを作成

rails g scaffoldを使用し、ransackで検索するためのModelを作成します

rails g scaffold post title:string content:text

その後、rails db:migrateでマイグレーションを行います

rails db:migrate

Ransackの導入

Gemfilegem 'ransack'を追加します

gem 'ransack'

その後、bundle installを実行します

bundle install

次に、ransackを使用して検索できるように実装していきます

app/views/posts/index.html.erbransackでの検索フォームを追加します

<p id="notice"><%= notice %></p>

<%= search_form_for @search do |f| %>
  <div class="form-group">
    <%= f.label :content_cont, "Content" %>
    <%= f.text_field :content_cont, class: "form-control" %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

<h1>Posts</h1>

<table>
<thead>
  <tr>
    <th>Title</th>
    <th>Content</th>
    <th colspan="3"></th>
  </tr>
</thead>

<tbody>
  <% @posts.each do |post| %>
    <tr>
      <td><%= post.title %></td>
      <td><%= post.content %></td>
      <td><%= link_to 'Show', post %></td>
      <td><%= link_to 'Edit', edit_post_path(post) %></td>
      <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
</tbody>
</table>

<%= link_to 'New post', new_post_path %>

あとは、app/controllers/posts_controller.rbindexアクションを以下のように変更します

  def index
    @search = Post.search(params[:q])
    @posts = @search.result
  end

最後に、rails sでローカルサーバを起動します

localhost:3000/postsにアクセスすると検索フォームが表示されています あとは実際に検索を行ってみてください!