Мне нужно написать валидацию, чтобы убедиться, что новые записи, созданные в нашем приложении, не имеют повторяющихся имен. Мне сказали, что validates_uniqueness не будет работать в этом случае, потому что приложение уже использует его для проверки создания исходного имени. Эта проверка будет гарантировать, что когда запись будет обновлена с новым именем, это тоже, является оригинальным ... это своего рода анти-видимость. Запрос также должен быть нечувствительным к регистру, поэтому мне нужно будет написать его с помощью функции UPPER() MYSQL, поэтому мне нужно будет использовать запрос массива, а не хэш.Запись запроса Array Rails
Вот эскиз псевдокода.
Запросить базу данных CUSTOMER. Установите флажок UPDATED_RECORD, чтобы узнать, уникально ли его NAME. Если это НЕ уникальный чек, чтобы узнать, соответствует ли его идентификатор записи, которая обновляется. Если это так, это нормально, так как это один и тот же идентификатор, и ему должно быть разрешено сохранять одно и то же имя. Если запрос находит то же имя, у которого есть другой идентификатор, связанный с ним, тогда должно отображаться сообщение об ошибке, например «Это имя уже используется XXXX».
Я довольно новичок в Rails, и у меня был медведь времени, получив это правильно.
Вот некоторые разъяснения по поводу того, почему я не думаю, что validates_uniqueness будет работать здесь.
Я думаю, что проблема связана с несколькими версиями одной и той же записи, если обновленная запись представляет собой новую версию той же записи (она имеет тот же самый идентификатор записи), то это действительно. Но если новая версия записи обновляется с именем, которое уже используется существующей записью (с другим идентификатором записи, то это не должно быть разрешено. Например, имея две записи с временной версией, {: record_id => 100,: name => «Test»} & {: record_id => 100,: name => «Test»}, должно быть разрешено, поскольку эти две записи являются версиями одного и того же термина. Но имея две записи: {: record_id => 100, : name => «Test»} & {: record_id => 201,: name => «Test»}, не должно быть разрешено, так как это приведет к тому, что две версии будут иметь одно и то же имя, но связаны с разными терминами.
Таким образом, вы сохранили имя в базу данных, а затем проверить, является ли имя уникальный ??? Почему бы не проверить наличие перед вставкой в базу данных ??? – PeterWong
Что касается вашей привязки: вы должны просто не допускать случайные дубликаты данных в вашем db. –