Разрешить acts_as_taggable_on для работы с хеш-тегами

Я использую драгоценный камень act_as_taggable_on: https://github.com/mbleigh/acts-as-taggable-on

Этот драгоценный камень принимает пользовательский ввод для тегов через запятую, т. Е. Умный, крутой, радостный

У меня есть частичное: shared/_micropost_form, который запрашивает теги:

<%= form_for(@micropost) do |f| %>
   <%= f.text_field :tag_list, placeholder: "Tags", id: "genre_tag_field" %>
<% end %>

Однако иногда пользователи вводят теги с помощью хэштегов, например #Happy #Drunk или #Stupid, #Drunk

Как я могу сделать так, чтобы перед созданием Micropost он проверял введенный:tag_list, если каждое слово начинается с #, а если это так, то удалял # и добавлял, (если не существует, уже) в конец каждое слово. Поэтому, когда пользователь вводит #Happy #Drunk, теги автоматически сохраняются как Happy, Drunk.

Модель микросообщений:

acts_as_ordered_taggable

Контроллер микросообщений:

def create
    @user = User.find(params[:user_id])
    @micropost = @user.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Posted!"
      redirect_to :back
    else
      flash[:notice] = "Error!"
      redirect_to :back
    end
end

Спасибо, ценю любую помощь. Это возможно, не бросая драгоценный камень?

1 ответ

Решение

Хотя это не проверено на практике, вот решение.

Согласно README, вы можете установить следующее в инициализаторе для удаления специальных символов в имени тега:

ActsAsTaggableOn.force_parameterize = true

Кажется, activ_as_taggable_on не имеет команды установки и инициализатора по умолчанию. Вы можете поставить выше настройки в любом файле в /initializers/и предпочел новый файл, посвященный этому драгоценному камню.

Установив это, все ваши входные данные тега будут обрабатываться после сохранения, как

my_string.parameterize

Тестовое задание

"radical)(cc".parameterize
#=> "radical-cc"

"#Happy".parameterize
#=> "happy"
Другие вопросы по тегам