0

我正在尝试在字段上运行 tokeninput 插件。

首先,本教程主要是围绕从另一个关联模型添加 id。我不想这样做,而只是使用我自己的模型(表)中的一个字段,称为tags.

目前,当我键入它时,它会执行 /notes/tags.json ajax 调用,但没有返回任何内容,我做得对吗?

控制器:

class NotesController < ApplicationController
  helper_method :sort_column, :sort_direction
  respond_to :html, :json

  def index
    @notes = Note.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page])
    @tag = Note.where('tag LIKE ?', "%#{params[:q]}%")
  end

模型:

class Note < ActiveRecord::Base
  attr_accessible :name, :tag

  def self.search(search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end
4

1 回答 1

1

好的:这是一个使用 jquery 自动完成的粗略但可行的示例

https://github.com/glennmartinez/QaBase/pull/1

步骤如下:

  • 创建响应 json 请求的路由(我劫持了 index 操作)
  • data-autocomplete-source在文本字段的属性中声明路径或数据本身,例如:<%= f.text_area :my_token_field, 'data-autocomplete-source' => features_path
  • 创建附加到引用 ID 的字段的 javascript(检查 html 源代码)
  • 提交表单并检查记录器中的 post-request-hash 并运行before_save您需要的任何转换以使字段工作。

使用 TOKENINPUT 并遵循http://railscasts.com/episodes/258-token-fields 并查看插件页面上的示例,它希望您的数据采用这种格式

[
  {"id":"856","name":"House"},
  {"id":"1035","name":"Desperate Housewives"},
  ...
]

您可以通过引用 ID 中的不同内容来创建相同的哈希值 .. 例如

Notes.all.map { |n| {:id => n.tag, :name => n.name } }.to_json

这将产生类似的东西:

[
  {"id":"tagname","name":"House"},
  {"id":"othertagname","name":"Desperate Housewives"},
  ...
]

然后,您可以告诉响应字段按标签名称搜索表。

当然,您需要在这些上创建某种唯一性,以便仅管理返回 1 条记录。

我希望这有帮助。

于 2012-06-09T06:45:31.050 回答