问题
Im trying to use the jquery tokeninput found here: http://loopj.com/jquery-tokeninput/ Following the guide from railcasts: http://railscasts.com/episodes/258-token-fields
By default, it required a 'name' column on the table/json..
Any way to customize to change it to something else (in my case, 'account_number')?
(in the reailcast, he says if you dont have a 'name' column, youll require extra customization)
回答1:
The magical lines are
<%= f.text_field :author_tokens, "data-pre" => @book.authors.map(&:attributes).to_json %>
and
format.json { render :json => @authors.map(&:attributes) }
These lines convert the data read from table into the json which jquery-tokeninput can understand. It passes on all the data from the model into, jquery-tokeninput, but it is not necessary. Tokeninput, only needs two fields,
id
-> for each selected token, this is posted along with formname
-> used as label of the token
If you don't want to have a name
field in your model, and want to use account_number
as the label, you can do it like following:
<%= f.text_field :author_tokens, "data-pre" => @book.authors.collect {|author| {:id => author.id, :name => author.account_number } } %>
and
format.json { render :json => @authors.collect {|author| {:id => author.id, :name => author.account_number } }
Basically, change the json passed to tokeninput. Pass accoun_number
as name
.
Update:
Change this line to something which better suits you:
@authors = Author.where("name like ?", "%#{params[:q]}%")
One suggestion may be:
@authors = Author.where("name like ?", "#{params[:q]}%")
Remove the first %
, but really depends on your data type and all.
回答2:
Just add the "propertyToSearch" options :
$(function() {
$("#user_tokens").tokenInput("/users.json", {
crossDomain: false,
propertyToSearch: "account_number",
theme: "facebook",
});
});
来源:https://stackoverflow.com/questions/6819481/using-jquery-tokeninput-without-default-name