Использование jquery TokenInput без имени по умолчанию - PullRequest
3 голосов
/ 25 июля 2011

Я пытаюсь использовать найденный здесь токен jquery: http://loopj.com/jquery-tokeninput/ Следуя инструкциям из Raillines: http://railscasts.com/episodes/258-token-fields

По умолчанию в таблице требовался столбец «имя»/ json ..

Любой способ настроить его, чтобы изменить его на что-то другое (в моем случае, 'account_number')?

(в репортаже он говорит, что у вас нет имени)', вам потребуется дополнительная настройка)

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Волшебные линии

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

и

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

Эти строки преобразуют данные, прочитанные из таблицы, в json, который может понять jquery-tokeninput. Он передает все данные из модели в 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 } }

В основном, измените json, переданный tokeninput. Передайте accoun_number как name.

Обновление:

Измените эту строку на что-то более подходящее вам:

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

Одно предложение может быть:

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

Удалите первый %, но на самом деле зависит от вашего типа данных и всего.

2 голосов
/ 26 апреля 2013

Просто добавьте параметры "propertyToSearch":

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