lo cual es un mal patrón, ya que find_by_name distingue entre mayúsculas y minúsculas y create! no lo hace [1], por lo que falla con ActiveRecord::RecordInvalid : Validation failed: Name has already been taken
Esto debería ser algo como
tag = Tag.where('name ILIKE ?', tag_name).first || Tag.create!(name: tag_name)
porque validates :name, presence: true, uniqueness: { case_sensitive: false }↩︎
Gracias por informar, ponle un pr-welcome a esto, supongo que necesitamos cambiar ese find_by_name para que realice una búsqueda insensible a mayúsculas y minúsculas.
Dado que tenemos:
La solución sería:
TAG = Tag.where('lower(name) = ?', tag_name.downcase).first
A TagGroup le falta el índice, por lo que necesitaríamos agregarlo y luego hacer lo mismo allí.
No, está desmarcado. Lo siento, ahora veo que eso importa.
No estoy seguro de cómo estás intentando reproducirlo, pero el CSV debería tener una abc en minúsculas y force_lowercase_tags debería estar desmarcado.
De hecho, no puedo reproducir el problema solo con una etiqueta.
Cometí un pequeño error en mi OP:
Tag.find_by_name no distingue entre mayúsculas y minúsculas (bueno) y Tag.find_by(name: ) distingue entre mayúsculas y minúsculas (malo).
Esto se debe a que David ya lo arregló para las etiquetas hace 7 años al anular el método find_by_name.