Волшебные линии
<%= 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, нужно только два поля,
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 } }
В основном, измените json, переданный tokeninput. Передайте accoun_number
как name
.
Обновление:
Измените эту строку на что-то более подходящее вам:
@authors = Author.where("name like ?", "%#{params[:q]}%")
Одно предложение может быть:
@authors = Author.where("name like ?", "#{params[:q]}%")
Удалите первый %
, но на самом деле зависит от вашего типа данных и всего.