🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3319閲覧

Ransackで検索結果が表示されない

tokushun109

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2019/09/25 09:10

Ruby初心者で、初めて質問させていただきます。
質問内容に至らぬところがあるかもしれませんが、よろしくお願いいたします。

前提・実現したいこと

Ransackを用いて、userの検索機能を実装したい。

発生している問題

名前とユーザーネームの検索フォームから、
該当するユーザーを検索し一覧で表示したいと思っています。
現状では、データベースに存在するユーザーと、全く同じ名前とユーザーネームを打ち込んで検索をかけても、データベース中の全てのユーザーが表示されてしまいます。

該当のソースコード

routes.rb

resources :users, only: [:new, :create, :edit, :update] do collection do get :search end end

users_controller.rb

class UsersController < ApplicationController ・ ・ ・ def search @search = User.ransack(params[:q]) @users = @search.result end ・ ・ ・ end

search.html.erb

<div class="row"> <div class="col-sm-6 offset-sm-3"> <%= search_form_for @search, url: search_users_path do |f| %> <div class= "form-group"> <%= f.label :user_name, 'ユーザーネーム' %> <%= f.text_field :user_name, class:'form-control' %> </div> <div class= "form-group"> <%= f.label :name, '氏名' %> <%= f.text_field :name, class:'form-control' %> </div> <%= f.submit '検索', class: 'btn btn-primary btn-block mb-5' %> <% end %> <table class="table table-striped table-bordered"> <tr> <th>ユーザーネーム</th> <th>氏名</th> </tr> <% @users.each do |user| %> <tr> <td><%= user.user_name %></td> <td><%= user.name %></td> </tr> <% end %> </table> </div> </div>

試したこと

pry-byebugで

class UsersController < ApplicationController ・ ・ ・ def search @search = User.ransack(params[:q]) @users = @search.result binding.pry end ・ ・ ・ end

で検索フォームに該当するユーザーと同一の名前とユーザーネームを入れて検索しても、
@usersに全てのユーザーが入っていたため、検索で絞り込むこと自体ができていないと考えています。

お手数をおかけしますが、何卒ご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

user_name というカラムと name というカラムの2つがあるという前提で説明してみます。
どちらかのカラムが存在しないようであれば、そっちはform-groupごと取っ払ってください。

現状

この部分を変更してみてください

erb

1<div class= "form-group"> 2 <%= f.label :user_name, 'ユーザーネーム' %> 3 <%= f.text_field :user_name, class:'form-control' %> 4</div> 5<div class= "form-group"> 6 <%= f.label :name, '氏名' %> 7 <%= f.text_field :name, class:'form-control' %> 8</div>

変更後

各カラム名の後ろに _cont をつけるだけです

erb

1<div class= "form-group"> 2 <%= f.label :user_name_cont, 'ユーザーネーム' %> 3 <%= f.text_field :user_name_cont, class:'form-control' %> 4</div> 5<div class= "form-group"> 6 <%= f.label :name_cont, '氏名' %> 7 <%= f.text_field :name_cont, class:'form-control' %> 8</div>

これで検索できるようになる気がします。

補足

英語への苦手意識があると辛いですが、ransackは公式の解説が充実しているので、他にも色々な検索方法を学ぶことができますよ。
activerecord-hackery/ransack

投稿2019/09/25 11:53

siruku6

総合スコア1382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokushun109

2019/09/25 12:21

回答ありがとうございます。 ご教授いただいた内容を実施したところ無事解決いたしました。 公式の解説も読んで、内容の理解に務めたいと思います。 本当にありがとうございました。
siruku6

2019/09/25 12:41

よかったです! pry-byebugを使うほどの方であれば、ransack で複数テーブルが関わる検索などもすぐにできるようになると思います。 頑張ってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問