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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Ruby

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

Q&A

解決済

2回答

368閲覧

railsにおけるサイト内検索で期待した表示結果が得られない。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

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

0グッド

3クリップ

投稿2019/08/01 17:03

前提・実現したいこと

Ruby on Rails 5で個人で価格比較サイトを開発し始めました。
・検索フォームの設置
・検索欄に打ち込まれたテキストデータをparamsで受け渡し(確認のためにブラウザに表示)
までは確認出来ています。

以下、自身のレベルになります。

プログラミングの学習を初めて2ヶ月程度です。
チェリー本を2周
progateのrailsを一周
railsチュートリアルを8章くらいまで

その他http通信に関する本やコンピュータの歴史や設計/要件定義の本などプログラミング以外の開発に必要な周辺知識をちょこちょこつまみました。

Railsに対する理解は低く、取り急ぎサービスのローンチを最速で目指しています。(徒に汚いコードは書きたく無いですが一定DRYや高度な記法については妥協するつもりです。)
特に個々のメソッド動きについてほとんどわかりません。

Rubyについては(初心者にしては)一定理解出来ているかと思います。

お手数ですが何卒よろしくお願いいたします。

発生している問題・エラーメッセージ

エラーは吐かないのですが、期待する検索結果を表示させる事が出来ません。 本来表示されて欲しい箇所に以下のテキストが表示されます。 #<モデルクラス名::ActiveRecord_Relation:0x007f931e963b20> オブジェクトidのActiveRecord_Relation版的なものが表示されていると理解しています。

該当のソースコード

Ruby

1ファイル名:app/controllers/results_sarch_controller.rb 2class ResultsSarchController < ApplicationController 3 def index 4 @word = params[:word] 5 @product = Product.where('sarch_word LIKE ?',"#{params[:word]}") 6 end 7end 8 9ファイル名:app/views/layouts/application.html.erb 10 11〜省略〜 12 <header> 13 <%= form_with url:'/search-results', method: :post, local: true do |form|%> 14 <input type="text" name = "word"> 15 <input type="submit" value = "検索"> 16 <% end %> 17 </header> 18〜省略〜 19 20ファイル名:app/views/results_sarch/index.html.erb 21<%= @word %><br> #確認のため表示 22<%= !!@products %> #確認のため表示 23<%= @products %> #確認のため表示 24<% @products.each do |product| %> 25 <%= product.name %><br> 26<% end %>

試したこと

paramsの受け渡しに問題は無い事は確認出来ています。(@wordが入力した文字列に対応して表示されています。)

@productsに問題無く期待したモデルを代入出来ているかはわかりませんが、!!@productsにより存在している事は確認出来ています。
また、この代入において複数の記述を試しました。

Product.where('sarch_word: LIKE ?',"#{params[:word]}")
Product.where(['sarch_word LIKE ?',"#{params[:word]}"])
Product.where('sarch_word LIKE ?',"#{@word}")

など。この部分が何かおかしいかと思っています。

views/results_sarch/index.html.erb内のeach内については恐らく間違ってないと思うのですが、、、

補足情報(FW/ツールのバージョンなど)

記載したコードは特にファイル名やpathなどについて一部質問用に改変しています。

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

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

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

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

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

guest

回答2

0

@product = Product.where('sarch_word LIKE ?',"#{params[:word]}")

ここでは、@productですが

<% @products.each do |product| %>

こちらでは@productsになっています。

投稿2019/08/01 23:13

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2019/08/02 20:11

大変申し訳ございません。ここの部分は実際の変数から質問時にてきとうなものへ書き換えてまして、その際に間違えたようです。 元のソースは間違ってませんでした。 大変失礼いたしました。
guest

0

ベストアンサー

曖昧検索のActiveRecordの構文は

モデルクラス.where("列名 LIKE ?", "%値%")

です

Ruby

1# Product.where('sarch_word: LIKE ?',"#{params[:word]}") 2Product.where("sarch_word LIKE ?", "%#{params[:word]}%")

%が必要です

確認方法は

$ rails c > word = "任意の文字列" > Product.where("sarch_word LIKE ?", "%#{word}%")

投稿2019/08/02 06:57

mtdsnsk

総合スコア789

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

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

退会済みユーザー

退会済みユーザー

2019/08/02 20:17

回答が遅くなりまして誠に申し訳ございません。 無事解決出来ました。 非常に簡単な事で大変申し訳ありませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問