Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

263
Visualizações
cómo mejorar la consulta usando Rails y Postgres

Tengo tres posts de modelos, una para 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

Intento usar rating_label, wait_label en la consulta, uso eager_load , joins pero no puede escribir varias etiquetas en la consulta.

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

esta consulta funciona bien con un valor, pero necesito una consulta múltiple, use la etiqueta de espera, por ejemplo 0-3, 4-7 intento usar IN() but i have error

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

mensaje de error para la última consulta

 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...

soluciono esto con una consulta de escritura para filtrar por 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

pero esta no es una manera eficiente

yo uso Rails 6 , PostgreSQL

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Lo está haciendo mal, puede pasar directamente una matriz para compararla en rieles. Aquí está la consulta actualizada

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

Espero que esto resuelva el problema.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda