Разрешить 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"