Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。5,050件0Railsで検索機能を作りたいと思っているのですが、ハマってしまっているのでご教授賜りたく思います。ArticleとItemというモデルがあり、Itemの中にはURLカラムがあり、そのURLをもとに検索を部分一致検索をかけられる検索フォームを作りたいと思っています。%#{params[:search]}").uniqでフォームに入力されたパラメーター(:search)をもとにlikeで含む検索を可能にしています。ここまではできているのですが、ここからItemに紐付いたArticleのレコードを引っ張りたいのですが、方法が思い浮かびません。ArticleとItemはItemにarticle_idがAricleのidと紐付いています。票4joinsを使えば関連するテーブルに対する検索を実行できます。文字列に直接パラメータを埋め込むとSQLインジェクションを引き起こすので大変危険です。次のように?を使ってバインドするようにしてください。"%#{params[:search]}").uniqSQLインジェクションはこちらに詳しい説明があります。ガイドP.S.余談ですが、SQLインジェクションが何かを理解していると以下の4コママンガの面白さが理解できるようになります。息子さんの小学校の者です。今コンピュータトラブルが発生しています。息子が何か壊したんでしょうか?」「ある意味そうですね。いう名前を付けたんでしょうか?」「ええ。「とりあえず、我々は今年度の生徒データを喪失しました。あなたにとっては、してやったりでしょうね。」「それといい勉強になったかしら。データベースの入力値はサニタイズすべきだって。4.2だとsanitize_sql_likeというメソッドが使えます。使い方はこんな感じです。Article.keyword_search(params[:search])LIKE検索では'%'や'_'が特殊な意味を持ちます。sanitize_sql_likeを使うと、こうした文字列をエスケープしてくれます。%#{params[:search]}")はいろいろまずいのでそこを直します。'%#{params[:search]}'")だったのでしょう。検索キー中に%や_があった時にLIKEのワイルドカードとして扱われるという結構重大な問題があるので、Arelを使ってこう書きかえます。"\\"))これで上記の問題は無くなります。Railsが古いと、#matchesが第二引数をサポートしていないかもしれません。search_key)でお茶を濁します。joinsなどを使った場合にカラム名の重複が起きてエラーになることがあるので、カラム名はテーブル修飾をしておいた方がいいです。その上で本題ですが、検索対象の主眼はどちらでしょうか。Itemを検索したい。:articleのリレーションを追加しておきます。Item.where(...)@items[0].articleでarticleを参照します。:itemsのリレーションを追加しておきます。Article.joins(:items).where(...).uniqもとのコードの#uniqはあまり意味が無かったのですが、この場合は#uniqを付けておかないと、同じarticle_idを持つItemが複数あった場合にArticleが重複して結果に出てきます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉コメントで回答する理由を教えてくださいサイトの未翻訳箇所を見つけて、もくもく会で直しましょう関連する質問2Rails4+Deviseのユーザ情報編集画面のフォームから受け取った値を書き換えて保存したい。1RailsでモデルのインスタンスからURLのパスを取得するときに、その取得するURLを変更する方法0railsで検索フォームを作っていたのですが、UrlGenerationErrorが出て、躓いております。複数枚の画像を投稿できる動的フォームのfile_fieldにそれぞれのサムネイル画像を表示させたい。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。