Using jquery TokenInput without default 'name'

后端 未结 2 364
梦如初夏
梦如初夏 2021-01-06 17:42

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

相关标签:
2条回答
  • 2021-01-06 18:01

    Just add the "propertyToSearch" options :

    $(function() {
      $("#user_tokens").tokenInput("/users.json", {
        crossDomain: false,
        propertyToSearch: "account_number",
        theme: "facebook",
      });
    });
    
    0 讨论(0)
  • 2021-01-06 18:09

    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,

    1. id -> for each selected token, this is posted along with form
    2. name -> 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.

    0 讨论(0)
提交回复
热议问题