Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
Rewrite acrive record query

I have model Issue that has_many :comments, model Comment that has_many :assets, as: :assetable, class_name: 'Comment::Asset', and model Asset that belongs_to :assetable, polymorphic: true

I need to get all the assets of the particular Issue. My firt implementation is as following:

comments = Comment.where(issue_id: issue.id).ids
assets = Asset.where(assetable_id: comments)

However, it is obviously far from perfect. I believe, that this sould be rewritten using joins or something like this, but I fail to wrap my head around it and find a solution. What would you recommend?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

You can "manually" join the assets table with comments, as you cannot eagerly load the polymorphic association between them:

Asset
  .joins('JOIN comments ON comments.id = assets.assetable_id')
  .where(comments: { issue_id: issue.id })

However if a join isn't really needed, where plus select do the trick as well:

Asset.where(assetable_id: Comment.where(issue_id: issue.id).select(:id))

Notice there only one query is performed due to the select(:id) usage instead of ids (which extracts at once every id from the resulting rows):

SELECT assets.*
FROM assets
WHERE assets.assetable_id IN (
  SELECT comments.id
  FROM comments WHERE
  comments.issue_id = ?
)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda