2010-12-20 9 views
7

auto_complete pluginacts as taggable on gemを組み合わせて使って、基本的にStack Overflow自体のタグ付け動作を再現しようとしています!私はこのrails castに記載されていることを多かれ少なかれ実行しています。単一のタグの場合、これは素晴らしい動作です。しかし、私は本当にユーザーがスペースやコンマ(スタックオーバーフローのような)を入力するたびにオートコンプリートが新たに開始するようにしたいと思っています。私は正規表現経由でこれを行うにはいくつかの方法があると思いますが、私はテキストフィールドにこの動作を適用する方法についてはわかりません(私はJavaScriptを使用してオートコンプリートを再起動すると思いますが、 。それはJavaScriptに来るとき、これは次のように私の見解が見えるものです:私のコントローラは、単にその特定のビジネスのためのタグを保存し、非常に簡単ですrailsオートコンプリートタグを正規表現を使用してコンマで区切った

<%= text_field_with_auto_complete :business, :tags, {}, { :url => formatted_businesses_path(:js), :method => :get, :with => "'search=' + element.value" } %> 

誰かが(正しい方向に私を指すことができれば私はこれについてどうやって行くのか分からないので、私は大いに感謝するでしょう)

+0

あなたは解決策に到達しましたか?私はまったく同じことをする必要があります。 – ardavis

+0

@ardavis:少し遅すぎても、 ':tokens => ["、 "、" '] 'オプションを見てください。 'control.js'はそれを使って「Tokenized incremental autocompletion」を提供します。 – evnu

答えて

10

私はこれが古いと知っていますが、この動作を再現するためにrails3-jquery-autocompleteacts-as-taggable-onを使用しました。彼らは非常にうまく、簡単に一緒に働く。

// Model 
class Foo < ActiveRecord::Base 
    acts_as_taggable_on :tags 
end 

// Controller 
class FoosController < ApplicationController 
    autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag' 
    ... 
end 

// Routes 
resources :foos do 
    collection do 
    get :autocomplete_tag_name 
    end 
end 

//View 
<% form_for :foo do |form| %> 
    <%= form.label :tag_list, "Tags" %> 
    <%= form.autocomplete_field :tag_list, autocomplete_tag_name_foos_path, :"data-delimiter" => ', ' %> 
<% end %> 

誰かを助ける希望。

+0

あなたのパスの「メモ」はどこから来ていますか? 'foos'でなければなりませんか?あなたは明確にするためにそれを変更したいかもしれません。 –

+0

ああ、それを逃した、ありがとう。固定 – chrisgooley

+0

あなたのコードのヒントは、助けてくれました、ありがとう! – lesyk

1

私はのオプションを調べますヘルパー。あなたが必要なものをサポートしていない場合、私はあなたがより支配権を持っているものに賛成してそれを捨てます。このようなヘルパー/プラグインでの私の経験は、あなたが期待していることを正確に行っているならば、時間を節約するだけです。何か習慣が必要な場合は、価値のあるものよりも苦痛を感じるでしょう。

text_field_with_auto_completeヘルパーを削除するには、レンダリングされたページで生成されたHTMLとJSを確認します。コピーして貼り付けてから、必要なものを修正してください。オートコンプリートプラグインのコントローラー側は引き続き使用できます。

あなたはカンマで文字列を分割することをお勧めしますJSは、次のようになります。

var tags = $('#myTextInput').value(); 
var splitTags = tags.split(/\w*,\w*/); 

JSのregexenはRubyのにかなり似ています。その正規表現はコンマで分割され、余分な空白を食べます。

関連する問題