使用jquery TokenInput而没有默认的’name’
我试图使用这里找到的jquery tokeninput: http ://loopj.com/jquery-tokeninput/按照铁路指南的指南: http: //railscasts.com/episodes/258-token-fields
默认情况下,它需要表/ json上的“名称”列。
有任何方法可以自定义将其更改为其他内容(在我的情况下,’account_number’)?
(在reailcast中,他说如果你没有’名字’栏,你需要额外的定制)
神奇的线条是
<%= 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,但这不是必需的。 令牌输入,只需要两个字段,
-
id
– >对于每个选定的令牌,这与表单一起发布 -
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]}%")
删除第一个%
,但实际上取决于您的数据类型和所有。
只需添加“propertyToSearch”选项:
$(function() { $("#user_tokens").tokenInput("/users.json", { crossDomain: false, propertyToSearch: "account_number", theme: "facebook", }); });