7

我的(很长,我很抱歉)问题是一个后续问题:如何将带有自动完成功能的标签添加到 Rails 中的现有模型?

我正在使用acts-as-taggable-onand rails3-jquery-autocomplete,并尝试建立一个系统(很像 Stack Overflow),用户开始输入标签,建议出现在下拉框中。

目标

我在答案#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. 问题.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 %>

一个简单的自动完成(无标记)可以工作(但每次页面加载只能工作一次)。使用标记,没有成功。

问题

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

  1. 我得到NameError (unitialized constant Tag)服务器对初始条目的响应。
  2. 使用不可标记的实现(搜索简单的问题文本本身),我得到一个 JQuery 自动完成样式的下拉菜单,但我的光标无法使用 up/down 访问选项。我必须用鼠标点击它们。此外,除非我重新加载页面,否则下拉菜单不会消失!
  3. 在服务器响应一次结果后(只有不可标记的工作正如我提到的那样),它不会再次响应按键或文本条目中的更改。

我将非常感谢您能够提供的任何帮助。我已经逐步完成了一些教程,但今天没有运气。

4

2 回答 2

4

我知道它只回答了您的一个问题,但我能够通过在我的控制器中明确指定类名来解决“未初始化的常量标签”问题:

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

似乎对 act_as_taggable_on 库的一些更改打破了 Tag 类存在的基本假设。

除此之外,当我的 jquery-ui css 没有正确包含在页面上时,我自己也注意到了一些奇怪的行为——您是否验证了所有内容都已正确链接?

于 2011-04-25T19:42:37.673 回答
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):
于 2012-04-16T13:53:18.570 回答