Найти или создать несколько записей в Ruby on Rails - "find_or_create_all" - PullRequest
1 голос
/ 07 июля 2010

Каков эффективный и элегантный способ выполнения "find_or_create_all" в рельсах?

Дано:
names = ["Bob", "John", "Jack", "Sid"],
Таблица пользователей

Необходимо:
users = ["#User: 0x3ae3a00", "#User: 0x3ae3938", "#Пользователь: 0x3ae3898 "," #User: 0x3ae37f8 "]

, где пользователь создается, только если он не существует.

Промежуточное решение - [" #Пользователь: 0x3ae3a00 ", nil, nil," #User: 0x3ae37f8 "] также будет делать, если, например, в таблице Users существуют только первая и четвертая записи.

Один из способов - использовать find_all_by_name и использоватьхэш для сопоставления с записями в массиве names, но мне интересно, есть ли в rails элегантный, но эффективный способ.

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

ar_extensions обеспечивает хорошее решение.* 1002.совпадение в уникальном столбце.

Загрузка больших наборов данных в envycasts охватывает этот случай http://envycasts.com/products/advanced-activerecord

0 голосов
/ 07 июля 2010

Если я понимаю, и вы хотите взять массив имен и преобразовать его в массив пользователей?

names = ["Bob","John","Jack","Sid"]
users = names.map{|name| User.find_or_create_by_name(name)}

, который вернет массив пользовательских объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...