Хорошо, наконец-то разобрался.
Получается, что столбец имени моего автора не name
, а author
. Поэтому мне нужно было внести изменения в сценарий js.coffee
, чтобы переопределить поиск по умолчанию name
.
Строка, которую вам нужно использовать:
propertyToSearch: "author"
Весь мой файл book.js.coffee теперь выглядит так:
jQuery ->
$('#book_author_tokens').tokenInput '/authors.json'
theme: 'mac'
prePopulate: $('#book_author_tokens').data('load')
propertyToSearch: "author"
Это фактически исправило ошибку Uncaught TypeError: Cannot call method 'replace' of undefined
Конечно, если вы используете другое имя столбца, вам также нужно отредактировать функции в файле author.rb, чтобы отразить это:
def self.tokens(query)
authors = where("author like ?", "%#{query}%")
if authors.empty?
[{id: "<<<#{query}>>>", author: "New: \"#{query}\""}]
else
authors
end
end
def self.ids_from_tokens(tokens)
tokens.gsub!(/<<<(.+?)>>>/) { create!(author: $1).id }
tokens.split(',')
end
Редактировать
Еще одна вещь, которую я должен был сделать для полей, которые должны быть предварительно заполнены существующими авторами, была изменить это:
= f.input :author_tokens, :data => { :load => @book.author }
На это:
= f.input :author_tokens, :input_html => { :data => { :load => @book.author } }
И тогда они появятся.
Надеюсь, это поможет вам.