rails中的tokeninput无法正常工作

时间:2012-06-07 21:31:16

标签: ruby-on-rails ruby-on-rails-3 jquery jquery-tokeninput

我正在尝试在字段上运行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

1 个答案:

答案 0 :(得分:1)

ok:这是一个使用jquery自动完成的粗略但有效的例子

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

步骤如下:

  • 制作一条响应json请求的路由(我劫持了索引操作)
  • 在文本字段的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条记录。

我希望这会有所帮助。