如何为habtm字段实现具有自动完成功能的文本字段?

时间:2008-10-30 14:43:26

标签: ruby-on-rails scriptaculous

我尝试了Rails Cookbook中的示例并设法使其工作。但是,text_field_with_auto_complete仅适用于一个值。

class Expense < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

在新费用视图中使用rhtml

<%= text_field_with_auto_complete :category, :name %>

自动完成适用于第一类。如何让它适用于多个类别?例如Category1,Category2
预期行为:类似于StackOverflow标签文本框

更新
通过一些帮助和一些修改,我得到了多个逗号分隔的自动完成功能(将在此处发布代码示例)。
但是在选择时,最后一个值将替换text_field_with_auto_complete的内容。因此,而不是Category1,Category2 ..当通过自动完成选择第二个类别时,文本框显示Category2。任何想法如何纠正这个?

4 个答案:

答案 0 :(得分:1)

我认为这篇博客文章涵盖了您所寻找的内容:AJAX autocompletion with Rails

答案 1 :(得分:1)

如果您只是尝试为每个字段支持多个自动完成实例,则可以使用符号:token将分隔符传递给自动完成选项。这提供了一个分隔符,允许多个结果。 Stackoverflow将使用:token =&gt; ''(引号之间应该有一个空格,但autoformat正在删除它)以在多次拍摄之间的分隔符处指定空格,尽管','更常用。

答案 2 :(得分:0)

这不是你的问题,但我不建议再使用HABTM了。您应该创建一个连接模型并使用has_many:through。 (在您的情况下,您将创建一个名为ExpenseCategoryAssignment的新模型,或其他东西)

问题在于HABTM会产生rails不喜欢的歧义,并且它往往会暴露出你不会看到的错误。

答案 3 :(得分:0)

你需要像这样使用“data-delimiter”param <%= f.autocomplete_field :brand_name, welcome_autocomplete_brand_name_path, "data-delimiter" => ', ' %>