質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

87.59%

【Rails】【Ransack】検索実行前に対象のカラムの値が全て表示されてしまう

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 671

score 5

🔰RoRにて投稿機能を利用した掲示板にて検索機能をRansackで追加実装しています。
(Ransackを初めて使ったので至らない点がある場合は申し訳ありません・・)

挙動

 実装したいこと

index.html.erbから検索フォームを利用し、検索すると検索結果がフォームの下に出力される。

 現在の挙動

検索機能自体には問題ないのですが、
indexhtml.erbに遷移すると検索対象としているカラムの値が羅列されている状態です。
その状態から検索フォームで検索をすると検索結果のみ表示されます。

仮説

if文の分岐に原因があると考え、each doで全て表示されてしまっているのかと考えますが
他に記述方法がわかりません。
同様のエラー記事等は確認しましたが、エラー箇所が異なるように思い解決には至りませんでした。

ご教示いただけますと幸いです。

コード

/topic_controller.erb

def index
    @search = Topic.ransack(params[:q]) 
    @results = @search.result(distinct: true)  
end
/index.html.erb

<div class="search">
    <%= search_form_for @search do |f| %>
      <div class="search-form">
        <%# <%= f.label :title_cont, "Name" %>
        <%= f.text_field :title_cont, placeholder: "コンテンツを検索する" %>
        <%= f.submit "Search" %>
      </div>
    <% end %>

    <% if @results.any? %>
      <% @results.each do |result| %>
        <%= link_to result.title, topic_path(result.id) %>
      <% end %>
    <% else %>
      <p>キーワードを含む投稿を検索できませんでした</p>
    <% end %>
</div>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

「indexhtml.erbに遷移すると検索対象としているカラムの値が羅列されている状態です。」
というのがどういう状況かよくわからないのですが、
「Ransacを入れる前と同じ」、すなわち「絞り込みが行われず、全データが表示される」
という意味でしょうか?

ですとそれは正しい動きです。
始めてindexに来た時は検索条件が空になっていますから、全データが検索されます

どういう動きにしたいのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/09/23 16:34

    コメントいただきありがとうございます!返信が遅れて申し訳ありません。
    Ransacを導入後に値が全て表示されてしまっている状態にあります。

    index.html.erb上に表示したい項目としてはページ上部から以下です。
    ・検索フォーム
    ・検索結果(検索フォームでの検索結果を表示したい)
    ・Topic一覧(現在は投稿機能にて投稿したTopicが一覧表示されている状態)

    以上が希望の表示なのですが、
    現状検索結果が表示される箇所にすでに値が表示されてしまっています。

    Ransackでは「検索かける前に一覧を表示しない」という機能がないということでしょうか?

    キャンセル

  • 2020/09/23 17:59

    Ransackは検索機能です。indexでは(細工をしなければ)Ranxakを使って検索します。絞り込み条件がないから全部出る
    というだけのこと。
    「検索かける前に一覧を表示しない」という機能が欲しければ、実装するしかないです。
    ん〜〜〜
    「検索かけるまえ」ってなんだ? この表現は課題を正しく表現していないな、多分。
    indexは検索して表示する actionですから、表示しているときは必ず検索してからです。

    キャンセル

  • 2020/09/25 17:17

    再度コメント頂きありがとうございます。
    Ransackに対する知識不足で的確な課題表現ができず申し訳ありません。
    色々調べてみたのですが、想定していた検索機能とは異なるようなので、
    他の方法で試行してみたいと思います。
    アドバイス頂きありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る