Почему бы вам не использовать find_or_create_by_user_id_and_tag_id()
или find_or_initialize_by_
.
Обновление
Поэтому, если вы хотите избежать создания дублирующих тегов, выможно просто использовать:
@post.tags.find_or_create_by_name('tag_name')
или если вы хотите применить некоторые изменения перед сохранением нового объекта, тогда используйте
@post.tags.find_or_initialize_by_name('tag_name')
В обоих случаях атрибут имени будет установлен на «tag_name»по умолчанию.
Таким образом, этот метод вернет вам тег, если он существует, в противном случае создаст его, чтобы вы могли использовать его при настройке модели соединения.
Обновление 2
Это на самом деле не будет работать с has_many: через, вы можете увидеть похожую проблему и обходной путь: Ошибка прииспользование `find_or_create_by` в` has_many` `through`