Что вы подразумеваете под наиболее эффективным? Я предполагаю, что под эффективным вы подразумеваете производительный, а не элегантный, СУХОЙ, обслуживаемый код и т. Д.
С точки зрения БД, если вы хотите вставить в БД 100 записей, это будет переводить в 100 "INSERT INTO events_models VALUES (x, x)" sql запросов (и, возможно, 100 "SELECT COUNT (*) .." запросы, если у вас также есть проверка уникальности). Таким образом, даже если нужный метод будет реализован в AR, он все равно будет иметь цикл в массивах атрибутов с сохранением каждой пары event_id, user_id).
С точки зрения Ruby / Rails, если вы хотите иметь валидации / обратные вызовы / и т. Д. Для вашей модели, то вы должны создать экземпляр ActiveRecord один за другим в цикле. Теперь, если вы хотите супероптимизировать свой метод (чтобы исключить создание экземпляра класса ActiveRecord), вы можете вручную писать SQL-запросы (следовательно, экономить время и память). Однако выигрыш минимален по сравнению с рисками.
Btw,
e.save!
необязательно, так как:
Такой же стиль динамического поиска может быть
используется для создания объекта, если он
не существует Эта динамика
искатель называется с
find_or_create_by_ и вернет
объект, если он уже существует и
в противном случае создает, а затем возвращает.