В настоящее время мой контроллер позволяет пользователю отправлять несколько «ссылок» одновременно. Он собирает их в массив, создает их для этого пользователя, но ловит любые ошибки, чтобы пользователь мог вернуться и исправить их. Как я могу игнорировать создание каких-либо ссылок, которые уже существуют для этого пользователя? Я знаю, что могу использовать validates_uniqueness_of с областью действия для этого пользователя, но я бы предпочел просто полностью игнорировать его создание. Вот мой контроллер:
@ links =
params [: ссылки] .values.collect {| ссылка |
current_user.links.create (ссылка)
} .reject {| p | p.errors.empty? }
У каждой ссылки есть URL, поэтому я подумал о том, чтобы проверить, существует ли этот link.url для этого пользователя, но я не совсем уверен, как и где это сделать. Должен ли я прикрепить это на свой контроллер как-то? Или это должен быть новый метод в модели, такой как в обратном вызове before_validation? (Примечание: эти "ссылки" не являются вложенными, но они принадлежат: user_to:).
Итак, я хотел бы просто иметь возможность игнорировать создание этих ссылок, если это возможно. Например, если пользователь отправляет 5 ссылок, но 2 из них уже существуют для него, то я бы просто хотел, чтобы эти 2 игнорировались, а остальные 3 были созданы. Как мне это сделать?
Редактировать: Благодаря Кандада, я сейчас использую это:
@ links =
Титулы [: ссылки] .values.collect.reject {
| Ссылка |
current_user.links.exists? (: URL => ссылка [: URL])}
@ links = @ links.collect {| link |
current_user.links.create (ссылка)
} .reject {| p | p.errors.empty? }
Итак, я разделил их, чтобы сначала проверить, существуют ли они, а затем создать те, которые не были отклонены. Есть ли лучший способ сделать это, как, может быть, объединение двух операторов увеличит производительность? Если нет, я думаю, что я очень доволен. (еще раз спасибо Кандада и Дж.)