使用jquery TokenInput而没有默认的'name'

时间:2011-07-25 16:41:20

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

我试图使用此处找到的jquery tokeninput:http://loopj.com/jquery-tokeninput/按照铁路广播的指南:http://railscasts.com/episodes/258-token-fields

默认情况下,它需要表/ json上的'name'列。

可以自定义将其更改为其他内容(在我的情况下,'account_number')?

(在realcast中,他说如果你没有'名字'栏,你需要额外的定制)

2 个答案:

答案 0 :(得分: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 - &gt;对于每个选定的令牌,这将与表单
  2. 一起发布
  3. name - &gt;用作令牌的标签
  4. 如果您不希望模型中有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]}%")
    

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

答案 1 :(得分:2)

只需添加“propertyToSearch”选项:

$(function() {
  $("#user_tokens").tokenInput("/users.json", {
    crossDomain: false,
    propertyToSearch: "account_number",
    theme: "facebook",
  });
});