Я понимаю, что вы пытаетесь выполнить какой-то алгоритм на основе ваших данных, чтобы сделать какую-то рекомендацию или нечто подобное.
У меня есть два предложения:
1) Вы переоцениваете свой алгоритм / дизайн на основе того, чего вы действительно хотите достичь. Например, в случаях, когда в приложении есть пользователи, у которых потенциально может быть много постов, и приложение хочет выполнить некоторый алгоритм на основе количества постов, тогда каждый раз будет достаточно дорого подсчитывать их посты. Чтобы оптимизировать это, в модель пользователя можно добавить столбец post_count и увеличивать это число всякий раз, когда пользователь успешно делает сообщение. Точно так же, если вы можете установить какую-то связь между вашим пользователем, событиями, группами и т. Д., Подумайте о чем-то в этих строках.
2) Если первое решение неосуществимо, то для чего-либо подобного вы должны избегать выполнения нескольких запросов, а затем использовать ruby для обработки данных, что, очевидно, будет очень дорогим и никогда не рекомендуется, если у вас большой набор данных. Итак, вам нужно сделать один SQL-запрос, используя соединение, и получить все данные за один раз. Также выбирайте только те имена полей из базы данных, которые вам нужны. Это действительно помогает в случае больших наборов данных. Например, если вам нужен идентификатор пользователя и event_id из таблицы user и events и ничего больше, тогда сделайте что-то вроде этого
User.find(:all,
:select => 'users.id, users.event_id',
:joins => 'join events on users.id = events.user_id',
:conditions => ['users.id in (your user ids)'])
Надеюсь, это укажет вам правильное направление.