3

我正在尝试使用此处找到的 jquery tokeninput:http: //loopj.com/jquery-tokeninput/遵循 railcasts 的指南:http: //railscasts.com/episodes/258-token-fields

默认情况下,它需要 table/json 上的“名称”列。

有什么方法可以自定义将其更改为其他内容(在我的情况下为“account_number”)?

(在直播中,他说如果您没有“名称”列,则需要额外的自定义)

4

2 回答 2

6

神奇的线条是

<%= f.text_field :author_tokens, "data-pre" => @book.authors.map(&:attributes).to_json %>

format.json { render :json => @authors.map(&:attributes) }

这些行将从表中读取的数据转换为 jquery-tokeninput 可以理解的 json。它将模型中的所有数据传递到 jquery-tokeninput 中,但这不是必需的。Tokeninput,只需要两个字段,

  1. id-> 对于每个选定的令牌,这与表单一起发布
  2. name-> 用作标记的标签

如果您不想name在模型中有一个字段,并且想account_number用作标签,您可以这样做:

<%= f.text_field :author_tokens, "data-pre" => @book.authors.collect {|author| {:id => author.id, :name => author.account_number } } %>

format.json { render :json => @authors.collect {|author| {:id => author.id, :name => author.account_number } }

基本上,更改传递给 tokeninput 的 json。作为. accoun_number_name

更新:

将此行更改为更适合您的内容:

@authors = Author.where("name like ?", "%#{params[:q]}%")

一个建议可能是:

@authors = Author.where("name like ?", "#{params[:q]}%")

删除第一个%,但实际上取决于您的数据类型和所有。

于 2011-07-25T17:20:15.433 回答
2

只需添加“propertyToSearch”选项:

$(function() {
  $("#user_tokens").tokenInput("/users.json", {
    crossDomain: false,
    propertyToSearch: "account_number",
    theme: "facebook",
  });
});
于 2013-04-26T12:03:27.197 回答