2012-11-18 10 views
8

私はこのビデオhttp://railscasts.com/episodes/102-auto-complete-association-revisedを使用して、自分のアプリのフォームにオートコンプリート検索入力を設定しました。 (ビデオはメンバーだけのものかもしれませんので、私もコードを投稿します。基本的に、DB(名前)の列と入力時にドロップダウンでオートコンプリートを検索します。フォームは、名前自体ではなく、名前に関連するIDを送信します。Rails:名前の検索を自動完成するにはどうすればよいですか?

私は、ビューでこれを行う簡単な方法はないと仮定しています。以下のコードは、私に知らせてください他のコードは、参考になる場合

おかげ

コントローラー:。

def game_name 
    game.try(:name) 
end 

def game_name=(name) 
    self.game = Game.find_by_name(name) if name.present? 
end 

コーヒー:ビューで

jQuery -> 
$('#play_game_name').autocomplete 
    source: $('#play_game_name').data('autocomplete-source') 

<%= f.label :game_name, "Search for a game" %> 
    <%= f.text_field :game_name, :class => "mlm mtm", data: {autocomplete_source: Game.order(:name).map(&:name)} %> 
+0

あなたはDownKeyやUpKeyを押すと、[このポスト]を探して値を取得している場合は、[1] [1]:http://stackoverflow.com/questions/8045773/jquery-ui-autocomplete-downarrow-uparrow – Fist

答えて

9

@LukasSvobodaの推奨に加えて、selecteventコールバックを上書きすることもできます。このコールバックは、ドロップダウンからアイテムを選択するとトリガーされます。コールバックでは、選択したアイテムの "ラベル"にテキストフィールド(送信する必要はありません)を設定し、ゲームIDの非表示フィールドの値を送信する必要があります選択された項目の「値」コーヒーで

:マークアップで

jQuery -> 
    $('#play_game_name').autocomplete 
    source: $('#play_game_name').data('autocomplete-source') 
    select: (event, ui) -> 

    # necessary to prevent autocomplete from filling in 
    # with the value instead of the label 
    event.preventDefault() 

    $(this).val ui.item.label 
    $('#game_id').val ui.item.value 

<%= text_field_tag nil, nil, :id => 'play_game_name', :class => "mlm mtm", data: {autocomplete_source: Game.order(:name).map { |t| { :label => t.name, :value => t.id } } %> 
<%= f.hidden_field :game_id, id: 'game_id' %> # tailor to your model 
+0

あなたの答えをありがとう。オートコンプリートはまだ機能しますが、後のすべてが機能していないようです。検索入力にはドロップダウンをクリックした後でも値が表示され、非表示入力は値を取得しません。奇妙なオートコンプリートが機能しなくなった後のすべてのものに似ています。 JSエラーはありません。\ –

+0

私のインデントは少し残っていましたが、私はそれをあなたの目的のために修正したと仮定します。選択コールバックに警告を発して、少なくとも発砲しているかどうか確認しましたか? – cdesrosiers

+0

ええ、私は私の最後にインデントを修正しました。私は別のJSの束をきれいにしました。なぜならどこかで何か問題が発生していると思ったからです。私がjqueryとjqueryのUI以外のすべてを返すと、次のエラーが出ます: "Uncaught ReferenceError:uiが定義されていません"。スーパー奇妙な、任意の思考? –

3

あなたはオートコンプリートにデータを設定することができhttp://api.jqueryui.com/autocomplete/#option-sourceことで。 SELECT2または選択を使用することを考慮し、より高度な機能について

<%= f.text_field :game_name, :class => "mlm mtm", data: {autocomplete_source: Game.order(:name).map { |t| { :label => t.name, :value => t.id } } %> 

あなたは次のようtext_fieldラインを変更する必要があります。

+0

あなたの答えに束をありがとう!カップルノート:あなたのコードには欠点があります(問題ではなく、私の最後に修正しました)。ソリューションは機能しますが、オートコンプリート後にIDが入力に表示されます。 ID番号を見たことがないユーザーがゲームの名前を表示してIDを送信する簡単な方法はありますか? –

関連する問題