在Rails中使用自动完成功能进行标记

时间:2011-04-16 08:01:15

标签: ruby-on-rails ruby-on-rails-3 jquery-ui autocomplete acts-as-taggable-on

我的(很久,我道歉)问题是对How to add tagging with autocomplete to an existing model in Rails?

的后续问题

我正在使用acts-as-taggable-onrails3-jquery-autocomplete,并尝试设置一个系统(很像Stack Overflow),用户开始输入标签,建议会显示在下拉框中。< / p>

目标

我在答案 #new表单中,我希望看到与问题相关的标记列表。即想象一下正在寻找新的Rails问题来回答,并搜索ra。弹出Ruby-on-Rails,点击它,你会看到RoR下的问题列表,其中任何一个都可以回答。

这些是我采取的步骤。

  1. 安装了两个宝石。两者似乎都独立工作。
  2. 已添加<%= javascript_include_tag "ui/jquery.ui.position", "ui/jquery.ui.autocomplete", "autocomplete-rails.js", "rails.js", "application.js" %>。 (我已经拥有Jquery,UI Core和UI Effects。)
  3. 答案控制器:我在顶部autocomplete :question, :tags, :full => true添加了。我也试过autocomplete :tag, :name, :full => true
  4. Question.rb:acts_as_taggable_on :tags
  5. 查看:
    <%= form_tag new_answer_url, :method => "get" do %>
    <%= autocomplete_field_tag "tag_list", 'tags', autocomplete_question_tags_answers_path %>
    <% end %>
  6. 简单的自动完成(无标记)有效(但每页加载只能运行一次)。有标记,没有成功。

    问题

    通过大量实验(以及许多小时),我遇到了这些问题:

    1. 我在服务器响应初始条目时得到NameError (unitialized constant Tag)
    2. 使用不可标记的实现(搜索简单的问题文本本身),我得到一个JQuery Autocomplete风格的下拉菜单,但我的游标无法通过up / down访问选项。我必须用鼠标点击它们。此外,除非我重新加载页面,否则下拉列表不会消失!
    3. 服务器响应结果一次(只有不可标记的工作正如我所说),它不会再次响应按键或文本条目的更改。
    4. 我非常感谢你能给予的任何帮助。我已经逐步完成了一些教程,但今天没有运气。

2 个答案:

答案 0 :(得分:4)

我知道它只回答了你的一个问题,但我能够通过在我的控制器中明确指定类名解决“unitialized constant Tag”问题:

autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag'

似乎有些changes to the acts_as_taggable_on library打破了Tag类存在的基本假设。

除此之外,当我没有正确地将jquery-ui css包含在页面中时,我发现了一些奇怪的行为 - 您是否已经确认所有内容都已正确链接?

答案 1 :(得分:0)

我注意到你遗失的一件事就是你的路线。我不得不这样做:

resources :resources do
  get :autocomplete_resource_tag, :on => :collection
end

在我的_form.html.erb

<%= f.autocomplete_field :tag_list, autocomplete_resource_tag_resources_path %>

现在我的问题是自动完成仍然不爱我

SQLite3::SQLException: no such column: resources.tag: SELECT  resources.id, resources.tag FROM "resources"  WHERE (LOWER(resources.tag) LIKE 'woo%') ORDER BY resources.tag ASC LIMIT 10
Completed 500 Internal Server Error in 1ms

ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: resources.tag: SELECT  resources.id, resources.tag FROM "resources"  WHERE (LOWER(resources.tag) LIKE 'woo%') ORDER BY resources.tag ASC LIMIT 10):