przbadu
przbadu

Reputation: 6049

refactor code to avoid N+1 query

I have my association like this

models/transcription.rb

class Transcription < ActiveRecord::Base
  belongs_to :transcription_status, :class_name => "TranscriptionStatus",
    :inverse_of => :transcriptions


  # Initialize to "new" status if a status isn't already set
  def setup_status
    if transcription_status.nil?  # this method is taking lots of execution time ( N + 1 )
      status = TranscriptionStatus.find_by_state("new")
      if status
        self.transcription_status = status
      end
    end
  end
end

models/transcription_status.rb

class TranscriptionStatus < ActiveRecord::Base
  has_many :transcriptions, :inverse_of => :transcription_status
end

Problem

Everytime I call transcription_status it is executing N+1 query. Suggest me the way to refactor this code to prevent N+1 query limit?

Thanks

Upvotes: 0

Views: 99

Answers (1)

apneadiving
apneadiving

Reputation: 115511

You must use includes to preload the data:

Transscription.includes(:transcription_status)

Upvotes: 3

Related Questions