Я бы порекомендовал просто добавить скрытый ввод для каждого тега.
<input type="hidden" name="post[tags][]" value="tag_name" />
<input type="hidden" name="post[tags][]" value="tag_name" />
<input type="hidden" name="post[tags][]" value="tag_name" />
тогда в рельсах
post.rb
def tags=(value)
tag_array = [*value]
# then just filter these out.
end
Я использую аналогичный метод с плагином tokenInput jQuery. Но в моем случае я поместил это внутри формы. Я решил проблемы, о которых вы упомянули, путем захвата события нажатия клавиши и предотвращения его для этого ввода, и я игнорирую значение входного поиска.
Единственное, что мне действительно нравится хранить в форме - это то, как она управляется потом. Я помещаю скрытый тег, имя и удаляемый «x» в промежуток (как вы упомянули), а затем просто удаляю этот тег при нажатии «x». Мне это нравится, потому что имя и hidden_tag удаляются одновременно.
Еще один совет. Если вы можете, передайте tag_id в скрытом поле. Таким образом, вам не нужно добавлять атрибут tags добавить все: <input type="hidden" name="post[tag_ids][]" value="tag_name" />
.