Я использую драгоценные камни https://github.com/mbleigh/acts-as-taggable-on и https://github.com/crowdint/rails3-jquery-autocomplete для реализации тегов в приложении Rails 4.
У меня есть модель с именем Question
с двумя отдельными категориями (контекстами) тегов: :topics
и :courses
. Проблема, которую я не могу решить, заключается в том, чтобы отфильтровать теги для автозаполнения, чтобы пользователю предлагались только теги из соответствующего контекста. В противном случае основные функции тегов и автозаполнения работают нормально, а это означает, что пользователь может ввести первые три буквы данного тега, и ему будет предложен список тегов для выбора (только без фильтрации по контексту).
вопрос.rb
acts_as_taggable_on :topics, :courses
questions_controller.rb
autocomplete :topic, :name, :class_name => 'ActsAsTaggableOn::Tag'
autocomplete :course, :name, :class_name => 'ActsAsTaggableOn::Tag'
Примечание. Я попытался изменить :class_name
на ActsAsTaggableOn::Course
или ActsAsTaggableOn::Topic
, но получил (несколько ожидаемую) ошибку: NameError (uninitialized constant ActsAsTaggableOn::Topic):
вопросы/_form.html.erb
<%= f.autocomplete_field :course_list, autocomplete_course_name_questions_path, :"data-delimiter" => ', ' %>
<%= f.autocomplete_field :topic_list, autocomplete_topic_name_questions_path, :"data-delimiter" => ', ' %>
config/routes.rb
resources :questions do
get :autocomplete_topic_name, :on => :collection
get :autocomplete_course_name, :on => :collection
end
Gemfile
gem 'acts-as-taggable-on', '~> 3.4.1'
gem 'rails3-jquery-autocomplete', '~> 1.0.14'
Стоит ли отказаться от rails3-jquery-autocomplete
и напрямую использовать виджет пользовательского интерфейса jQuery? Возможно, есть способ использовать опцию :scopes
из rails3-jquery-autocomplete
для достижения желаемого результата? Я просто неправильно подхожу к проблеме, используя разные контексты тегов в одной и той же модели? Возможно, переопределить методы autocomplete_...
в контроллере Questions
, чтобы отфильтровать правильные теги? Любые мысли приветствуются. Заранее спасибо.