Разрешить act_as_taggable_on работать с хэш-тегами

Я использую гем acts_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

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


person APJ    schedule 30.08.2013    source источник


Ответы (1)


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

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

ActsAsTaggableOn.force_parameterize = true

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

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

my_string.parameterize

Контрольная работа

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

"#Happy".parameterize
#=> "happy"
person Billy Chan    schedule 30.08.2013
comment
спасибо, я добавлю это, однако все еще есть проблема, что #happy #sad.parameterize станет счастливым-грустным, когда они мне нужны как 2 разных тега - person APJ; 30.08.2013
comment
@APJ, вы все равно можете использовать настройку, указанную в README: ActsAsTaggableOn.delimiter = (',', ' ', '|'), просто добавьте пробел в качестве разделителя - person Billy Chan; 30.08.2013