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

261
Vistas
how to improve query using rails and postgres

I have three models postshas one for post_rating, post_waiting_time

post.rb

name_column      type           example 
id               integer           20
name             string           'welcome'
user_id          integer           1

post_rating.rb

name_column      type           example 
id               integer           10
rating_label     enum           poor,average,great
post_id          integer           20

post_waiting_time.rb

name_column      type           example 
id               integer           10
waiting_label     enum           0-3,4-6,7-10
post_id          integer           20

i try use rating_label, waiting_label in query use eager_load, joins but can't write multi label in query

posts_lists = user.posts.eager_load(:post_rating, :post_waiting_time).where("post_waiting_times.waiting_label = ? ", '0-3')

this query work good with one value but i need multi query use waiting_label for example 0-3, 4-7 i try use IN() but i have error

Post.eager_load(:post_rating, :post_waiting_time).where('post_waiting_times.waiting_label IN( ? )', 'more_30,0-
3')

error message for last query

ActiveRecord::StatementInvalid (PG::InvalidTextRepresentation: ERROR:  invalid input value for enum tag_label: "more_30,0-3")
LINE 1: ...ERE (post_waiting_times.waiting_label IN( 'more_30,0...

i fix this with write query for filter by rating_label, waiting_label

posts_lists = user.posts
posts_lists.each do |record|
        flag_filter = false
        unless waiting_filter.empty?
          flag_filter = if waiting_filter.include?(record.post_waiting_time.waiting_label)
                          true
                        else
                          false
                        end
        end

        unless rating_filter.empty?
          flag_filter = if rating_filter.include?(record.post_rating.rating_label)
                          true
                        else
                          false
                        end
        end
    if flag 
       puts record
    end 

but this not efficiency way

i use Rails 6, PostgreSQL

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

0

You are doing it wrong, you can directly pass an array for comparison in rails. Here is the updated query

Post.eager_load(:post_rating, :post_waiting_time).where(post_waiting_times: {waiting_label: ['more_30','0-3']})

Hope this solves the problem.

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