У меня есть три таблицы: учетные записи, инвестиции и игры. У Инвестиции есть account_id, game_id, некоторые счетчики статистики, и создается при первом участии в Аккаунте.Как я могу написать этот запрос эффективно в Ruby on Rails?
Я хочу, чтобы предоставить список JSON последних игр наряду с инвестициями пользователя в этой игре, как это:
[{id: 666, name: "Foobar", ..., investment: {tokens: 58, credits: 42, ...}},...]
Если они еще не участвовали в игре, я все еще хочу, чтобы включать в себя Инвестиционный объект со значениями по умолчанию, так что я преодолела serializable_hash
функцию в моей модели игры:
# game.rb
has_many :investments
def serializable_hash(options=nil)
options ||= {}
i = investments.find_or_initialize_by_account_id options[:uid]
{:id => id, ..., :investment => i.serializable_hash}
end
Однако, когда я бегу что-то вроде Game.find(list_of_ids).to_json(:uid => current_user.id)
, Rails делает отдельный запрос по таблице инвестиций для каждой игры. Я попробовал Game.includes(:investments).find(list_of_ids).to_json(:uid => current_user.id)
, но он не только загружает инвестиции для всех пользователей, но и выполняет отдельный запрос для каждой игры, чтобы найти или инициализировать инвестиционный объект.
Одним словом, учитывая список игровых идентификаторов и идентификатор учетной записи, какой чистый способ загрузить связанные объекты инвестиций, которые существуют в одном запросе, и инициализировать остальные?
Это работает тот же запрос, у меня был выше, Game.includes (: инвестиции) .find (LIST_OF_IDS) – icecream
@Violet В этом случае он должен быть 'includes' вызов что делает их отдельными. –