Использование jquery TokenInput без «имени» по умолчанию


person Jonah Katz    schedule 25.07.2011    source источник
comment
Обновленный ответ с подробностями об изменении логики поиска.   -  person rubish    schedule 27.07.2011


Ответы (2)


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

<%= 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]}%")

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

person rubish    schedule 25.07.2011
comment
Понятно!!! Ты самый лучший!! Я был на грани того, чтобы сдаться, пока ты не появился. - person Jonah Katz; 25.07.2011
comment
Рад помочь :). Не знал, что на эту тему есть рельсовая трансляция, до недавнего времени я видел несколько вопросов на SO об этом. - person rubish; 25.07.2011
comment
Извините, что задаю дополнительный вопрос после того, как сказал, что все было хорошо, но только что обнаружил небольшую ошибку. Когда я перехожу к автору (мой случай pi_name), предварительное заполнение заполняется примерно 20 неопределенными значениями. Вот мой код: <%= f.text_field :account_number_tokens, "data-pre" => @pi_name.account_numbers.collect {|account_number| {:id => account_number.id, :name => account_number.accoun t_number }} %> - person Jonah Katz; 25.07.2011
comment
есть место для подвешивания, я вижу в account_number.accoun t_number, может быть просто опечатка. Не забудьте to_json после сбора. - person rubish; 25.07.2011
comment
Две тонкости, чтобы убедиться, что во-первых, есть поле account_number в модели account_number, во-вторых, добавьте to_json в конце сбора. - person rubish; 25.07.2011
comment
to_json сделал это! Все мои проблемы решены, все работает прекрасно. Большая помощь! - person Jonah Katz; 25.07.2011

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

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