以下のような、検索ボックスに文字を入れると部分一致したユーザー名が表示される検索機能を追加したいです。
手順として
①検索ボックスに文字が入力されたらjQueryでイベントを発生
②入力された文字を変数に代入
③AjaxでRails側に変数を渡し、アクションを叩いてレンダリング
と考えいくつかサイトを参考にしたのですが、jQuery側でRailsのアクションがうまく叩けません(エラー発生時の処理が行われます)。
また、ビューとコントローラのレンダリングの部分も正しく書けていないような気がします。
分からない点が多数あり申し訳ないのですが、修正点や代替案を教えていただきたいです。
ヘッダー部分
ERB
1<div> 2 <input type="text" id="search_area" list="result" /> 3 <%= render 'users/search' %> 4</div>
users/_search.html.erb(入力した文字に応じてレンダリングしたい部分)
ERB
1<datalist id="result"> 2 <% if @search_result.present? %> 3 <% @search_result.each do |s| %> 4 <option value="#{s.name}" class="result"></option> 5 <% end %> 6 <% end %> 7</datalist>
JavaScript
1$(function() { 2 $('#search_area').on('input', function(){ 3 // 入力された文字列を変数searchTextに代入 4 searchText = $(this).val() 5 6 // searchTextをRailsに渡し、searchアクションを叩きたい 7 $.ajax({ 8 url: '/users/search', 9 type: 'POST', 10 datatype: 'html', 11 async: true, 12 data: { searchText: searchText }, 13 // 成功時 14 success: function(data) { 15 alert("success"); 16 }, 17 // エラー発生時 18 error: function(data) { 19 alert("error"); 20 } 21 }); 22 }); 23});
ルーティング
Ruby
1post 'users/search', to: 'users#search'
usersコントローラ searchアクション
Ruby
1def search 2 users = User.all 3 @search_result = users.where('name LIKE ?', "%#{params[:searchText]}").limit(5) 4 render 'users/search' 5 respond_to do |format| 6 format.html { redirect_to request.referrer || root_url } 7 format.js 8 end 9end
回答1件
あなたの回答
tips
プレビュー