我正在使用旧的auto_complete plugin和acts as taggable on gem一起尝试基本上复制Stack Overflow本身的标记行为!我或多或少地做了这个rails cast中描述的内容。对于单个标签,这很有用。但是,我真的想让它每次用户输入空格或逗号(就像在Stack Overflow上一样)时,自动完成将重新开始。我想有一些方法可以通过正则表达式做到这一点,但我不知道如何将这种行为应用到text_field(我想用JavaScript来“重启”自动完成,但不可否认我相当弱谈到JavaScript。这就是我的观点:
<%= text_field_with_auto_complete :business, :tags, {}, { :url => formatted_businesses_path(:js), :method => :get, :with => "'search=' + element.value" } %>
我的控制器非常简单,只需为特定业务保存标签。
如果有人能指出我正确的方向(因为我不知道如何去做)我会非常感激。
答案 0 :(得分:10)
我知道这已经过时了,但为了重新创建这种行为,我使用rails3-jquery-autocomplete和acts-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 %>
希望能有所帮助。
答案 1 :(得分:1)
我会查看text_field_with_auto_complete
助手的选项。如果它不支持你所需要的东西,我会抛弃它,转而支持你可以控制的东西。我对这样的助手/插件的经验是,如果你正在做他们期望你做的事情,他们只会节省你的时间。如果你需要任何定制的东西,那么试图解决它们会比它们的价值更加痛苦。
抛弃text_field_with_auto_complete
助手,查看它在渲染页面中生成的HTML和JS。复制并粘贴,然后修改它以执行您需要的操作。您仍然可以使用自动完成插件的控制器端。
你想要在逗号上拆分字符串的JS看起来像这样:
var tags = $('#myTextInput').value();
var splitTags = tags.split(/\w*,\w*/);
JS regexen非常类似于Ruby。那个正则表达式将用逗号分开,吃掉额外的空格。