계정, 투자 및 게임이라는 세 개의 테이블이 있습니다. 투자에는 account_id, game_id 및 일부 통계 카운터가 있으며 처음 계정이 게임에 참여할 때 만들어집니다.Ruby on Rails에서이 쿼리를 효율적으로 작성하려면 어떻게해야합니까?
나는 이런 식으로, 그 게임에서 사용자의 투자와 함께 최신 게임의 JSON 목록을 제공 할 : 그들이 아직 게임에 참여하지 않은 경우
[{id: 666, name: "Foobar", ..., investment: {tokens: 58, credits: 42, ...}},...]
, 나는 여전히를 포함 할 기본값 투자 목적은, 그래서 내 게임 모델에서 serializable_hash
기능이 오버라이드 (override) : 나는 Game.find(list_of_ids).to_json(:uid => current_user.id)
같은 것을 실행할 때, 그러나
# 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.includes(:investments).find(list_of_ids).to_json(:uid => current_user.id)
을 시도했지만 모든 사용자에 대한 투자를로드 할뿐만 아니라 투자 오브젝트를 찾거나 초기화하기 위해 각 게임에 대한 별도의 쿼리를 수행합니다.
간단히 말해서, 게임 ID와 계정 ID의 목록이 주어지면 하나의 쿼리에 존재하는 관련 Investment 오브젝트를로드하고 나머지를 초기화하는 방법은 무엇입니까?
(: 투자) .find이 경우 (LIST_OF_IDS) – icecream
@Violet는, 그것은'includes' 호출해야합니다 그것은 그들을 분리시키고 있습니다. –