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

200
Visualizações
Seleccionando objetos con rangos usando el número de entrada en Rails

Tengo objetos que tienen un rango de antigüedad mínimo/máximo:

 name: "Event 1" type: Package # inheritance min_age: 1 max_age: 8 category_id: 2 # Birthday

Me gustaría seleccionar y devolver estos objetos en función de la preferencia de edad y tipo del usuario al observar si el rango de edad del objeto satisface el número ingresado.

Actualmente estoy atascado con:

Código del controlador:

 age = params[:age] item_type = params[:item_type] @all_items = Item.where("categories.name = ?", 'birthday') @events = @all_items.where("(type: #{item_type}) AND ...here I need to lookup if the #{age} variable is within the object range")

Ahora el problema es que necesito elegir un evento de cumpleaños por el número de usuario ingresado, con Rango en el objeto mismo. ¿Hay alguna manera de hacerlo sin pasar por cada objeto?

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

0

@events = @all_items.where("type = #{item_type} AND min_age >= #{age} AND max_age <= #{age}")

Supongo que las asociaciones se ven de la siguiente manera:

 Item has_many :categories Category belongs_to :item

En este caso

 Item.where("categories.name = ?", 'birthday')

lo más probable es que falle porque las categories no están unidas con algo como

 ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "categories"

Esto es lo que querrás hacer:

 Item.joins(:categories) .where(categories: { name: 'birthday' }) .where("items.type = '#{item_type}' AND items.min_age >= #{age} AND items.max_age <= #{age}") .group('items.id')

El uso de BETWEEN de PostgreSQL podría hacer que la consulta se vea mejor y más corta:

 Item.joins(:categories) .where(categories: { name: 'birthday' }) .where("items.type = '#{item_type}' AND #{age} BETWEEN items.min_age AND items.max_age") .group('items.id')
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