1

この質問は、Bootstrap バージョンではなく、Twitter が最近リリースした新しいスタンドアロンの typehead に関するものです。

Twitter Typeahead.js

これをレールアプリに統合して、データベースからいくつかの投稿の名前を検索しようとしていますが、それを機能させるのに問題があります。検索しても何も起こりませんが、/posts.json に移動してデータを取得できます。

ハードコードされたデータを使用した作業バージョンがあります。ここで実際の動作を確認できます。「a」と入力して結果を取得します。

jsFiddle ローカル バージョン

JS

$(document).ready(function() {
  $('input.typeahead').typeahead({
  name: 'posts',
  prefetch: '/posts.json',
  limit: 10
 });
});

入力

<input class="typeahead" type="text" dir="ltr" placeholder="Search here....">

これが私のコントローラーです:

def names
  names = []
  all = Post.where("name LIKE ?", "%#{params[:term]}%")
  all.each { |subc| names << subc.name }

render json: names

終わり

パラメータ設定:

Started GET "/sub_categories/names?q=a" for 127.0.0.1 at 2013-03-15 09:45:40 -0400
Processing by SubCategoriesController#names as JSON
  Parameters: {"q"=>"a"}
  SubCategory Load (0.5ms)  SELECT "sub_categories".* FROM "sub_categories" WHERE (name LIKE '%%') LIMIT 10
Completed 200 OK in 3ms (Views: 0.3ms | ActiveRecord: 0.5ms)
4

1 に答える 1

2

プリフェッチを機能させることができませんでしたが、json ソースの最後に「?q=%QUERY」を追加することでリモートを機能させました。

remote: '../sub_categories/names?q=%QUERY'

次に、クエリで、最初の「%」を省略して、入力内容と一致させる必要があることがわかりました。

コントローラ:

Post.where("name LIKE ? OR name LIKE ?", "#{params[:q]}%")

于 2013-03-15T18:51:54.883 に答える