A

プログラミングの学習記録

【本日の学習内容:共同開発(検索機能)】

インクリメントサーチの実装に取り組みました。

記事を参考に以下の手順で実装を進めたのですが、

5で取得したdataをどう活用すれば良いかわからず詰まってしまいました。

 

1.text/index.html.erbにフォームを作成

<form class="search-form mx-auto mb-3">

    <i class="fa fa-search search-icon"></i>   

     <%= text_field_tag :title,"",  class: "form-control js-text-field", placeholder: "教材を探す"%>

</form>

 

2.検索窓に入力した値を取得して、そのデータをRails側にリクエストを送信

app/javascript/packs/search.js

$(function () {

  $('.js-text-field').on('keyup', function () {

    var title = $.trim($(this).val());

 

    $.ajax({

      type: 'GET',

      url: 'texts/searches',

      data: { title: title },

      dataType: 'json'

    })

  });

});

 

3.Messages::SearchesControllerのindexアクションが動くようにルーティングを記述

namespace :texts do

    resources :searches, only: :index, defaults: { format: :json }

end

 

4.リクエストを送信されたデータを受け取るcontrollers/texts/searches_controller.rbを作成し、

indexアクションに「検索処理のコード」と「検索結果のデータをレスポンスするコード」を記述

class  Texts::SearchesController < ApplicationController

  def index

   @texts = Text.where('title LIKE(?)' , "%#{params[:title]}%")

 

    respond_to do |format|

      format.html {redirect_to :root }

      format.json {render json: @texts}

  end

end

 

5.Controllerからレスポンスを送信されたデータを受け取って、JavaScript(jQuery)で受け取ったデータを元にタイトル一覧に反映させる

app/javascript/packs/search.js

$(function () {

  $('.js-text_field').on('keyup', function () {

    var title = $.trim($(this).val());

    $.ajax({

      type: 'GET',

      url: '/messages/searches',

      data: ("title=" + title),

      dataType: 'json'

    })

    // 以下を追加

    .done(function (data) {

      console.log(data); // dataを確認する

    })

  });

});

 

引き続き取り組みます!