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

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

詳細はこちら
Ruby on Rails

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

Q&A

解決済

1回答

1069閲覧

【Rails】rails4-autocompleteを実装しようとしているのですが、フォームに候補が表示されない

Boston12121

総合スコア10

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/31 05:52

編集2020/01/02 13:54

オートコンプリートでフォームに入力した値を補完して候補を表示させたいのですが、フォームに入力しても候補がなにも表示されない状態です。DBから候補を引っ張ってこれていないのが原因なのでしょうか。ググってかたっぱしから試してみてもうまくいかず、お手上げ状態です。

gemはrails4-autocompleteを入れてます。
バージョン:Rails 5.2.3

フォームの候補データは model名:idol、column名:idol_nameから引っ張っています。

controllers/images_controller.rb class ImagesController < ApplicationController autocomplete :idol, :idol_name, full: true end
config/routes.rb Rails.application.routes.draw do root "images#index" ~~~~ resources :images do get :autocomplete_idol_idol_name, :on => :collection end ~~~~ end
views/images/index.html.erb <%= form_with model: @image, local: true do |form| %> <%= form.autocomplete_field :idol_name, autocomplete_idol_idol_name_images_path %> <% end %>

よろしくお願い致しますs。

--------追記--------

返信が遅れました。申し訳ございません。

chromeのツールから確認したところ、[DOM]一意でないIDを持つ2つの要素が見つかりました と表示されていました。

Worningの内容 [DOM] Found 2 elements with non-unique id #image_idol_name: (More info: https://goo.gl/9p2vKq) <select name=​"image[idol_name]​" id=​"image_idol_name">​  <option value>​</option> ​  <option value=​"田中太郎">​田中太郎​</option>​ ​  <option value=​"伊藤次郎">​伊藤次郎​</option>​   <option value=​"山田花子">​山田花子</option>   ・   ・   ・  ​</select>​ <input data-autocomplete=​"/​images/​autocomplete_idol_idol_name" type=​"text" name=​"image[idol_name]​" id=​"image_idol_name">​

JS側のエラーはなかったです。どこかRailsの記述内容が間違っているからこの注意書きが表示されているっぽい?
「一意でないIDを持つ2つの要素が見つかりました」の部分を見直してみます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/01/01 06:16 編集

rails4-autocompleteを使ったことはないんですが javascript 側に何の変更もなしに動くとは思えないので application.js に require 'rails4-autocomplete' か javascript_include_tag 的なものがいると思います。あと rails4 ってかいてるけど 5 に対応してるんでしょうか。jquery-ui のオートコンプリートを使えば自分で候補を返すコントローラはかく必要がありますがジェムのブラックボックスではまることは無いかもしれないです。
Boston12121

2020/01/01 11:00 編集

返答ありがとうございます。 rails4-autocompleteはrails5に対応しているっぽいので問題ないと思います。 また jsファイル //= require autocomplete-rails cssファイル *= require jquery-ui を追記しています。 JS側の処理はautocompleteがよしなにしてくれるという認識でいたのですが、やはりJS側の処理の記述は必要かもしれないです。 もう少し調べて色々試してみます。ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/01/01 13:07

コレ自体 jquery-ui をつかったものなのですね。とりあえず chrome の F12 とかで JS エラーが出てないですか? オートコンプリートFORMに文字を入力したときに Rails にリクエストがとんできてますか? Rails は 200 正常なレスポンスを返してますか? このあたりを確認して原因を切り分けたいです
Boston12121

2020/01/02 13:56

返信が遅れてしまいました。申し訳ございません。 ツールで確認した内容を追記しました。一応JS側のエラーは出ていませんでした。Railsの記述内容が間違っているっぽい?です。
退会済みユーザー

退会済みユーザー

2020/01/02 17:25 編集

ドキュメントよんだ限りJSはrequireだけで特に何もする必要ないみたいですね。IDの問題が解決すれば動くのでは… あと autocomplete に渡す minLength が 2 で固定されてるので 2 文字までうたないとコンプリート作動しないみたいです( https://github.com/peterwillcn/rails4-autocomplete/blob/master/lib/assets/javascripts/autocomplete-rails-uncompressed.js#L94 http://js.studio-kingdom.com/jqueryui/widgets/autocomplete ) それでも動かなければ Chrome 開発ツールの Network > xhr を開いた状態で2文字うってみて Rails コンソールのログと Chrome 開発ツールの Network ajax のヘッダ、レスポンスを追記してほしいです
guest

回答1

0

自己解決

一応解決しました。

jqueryのライブラリが重複していたのと、jquery-uiを読み込ませる順番が悪かったようで、一番上にもってきたら候補が現れました。かなり初歩的なミスでした。すみません。

とはいえ、Javascriptに関しては全く触ったことがないので、処理部分が完全にブラックボックス状態なので、ここら辺は別途勉強しようと思います。

回答くれた方、ありがとうございました!

投稿2020/01/05 07:43

Boston12121

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問