was ein schlechtes Muster ist, da find_by_name Groß- und Kleinschreibung beachtet und create! dies nicht tut [1], sodass es mit ActiveRecord::RecordInvalid : Validation failed: Name has already been taken fehlschlägt.
Dies sollte so etwas sein wie tag = Tag.where('name ILIKE ?', tag_name).first || Tag.create!(name: tag_name)
weil validates :name, presence: true, uniqueness: { case_sensitive: false }↩︎
Danke für die Meldung, fügen Sie dem einen pr-welcome hinzu, ich schätze, wir müssen dieses find_by_name ändern, um eine Groß-/Kleinschreibung ignorierende Suche durchzuführen.
Da wir haben:
Die Korrektur wäre:
TAG = Tag.where('lower(name) = ?', tag_name.downcase).first
TagGroup fehlt der Index, also müssten wir ihn hinzufügen und dann dasselbe dort tun.
Nein, es ist nicht angekreuzt. Entschuldigung, ich sehe jetzt, dass das wichtig ist.
Ich bin mir nicht sicher, wie Sie versuchen, dies zu reproduzieren, aber die CSV sollte ein Kleinbuchstaben-abc enthalten und force_lowercase_tags sollte nicht angekreuzt sein.
Ich kann es tatsächlich nicht mit einem einzelnen Tag reproduzieren.
Ich habe in meiner ursprünglichen Nachricht einen kleinen Fehler gemacht:
Tag.find_by_name ist nicht case-sensitiv (gut) und Tag.find_by(name: ) ist case-sensitiv (schlecht).
Das liegt daran, dass David dies bereits vor 7 Jahren für Tags behoben hat, indem er die Methode find_by_name überschrieben hat.
Für TagGroup wurde diese Korrektur nie angewendet.