Pregunta

Soy bastante nuevo en Rails, y el problema con el que me estoy topando se describe de la siguiente manera:

Primero, hay una mesa con casas. Las casas tienen múltiples fechas asociadas con Has_Many: Fechas

En segundo lugar, está la tabla con fechas. Fechas tienen la asociación pertenencia_to: casa

Ahora, en una búsqueda, un usuario puede seleccionar una fecha de inicio y final. Y lo que quiero hacer es buscar en cada casa sus fechas y verificar si están entre la fecha de inicio y final. Si una o más de las fechas están dentro de la fecha de inicio/finalización, debe encontrarse.

Estas son mis condiciones para buscar en una casa otros criterios:

parameters.push( [ params[:house_category_id], "houses.house_category_id = ?" ] );
parameters.push( [ params[:province_id], "houses.province_id = ?" ] );

He creado un método para crear condiciones válidas con estos parámetros.

Por favor, dígame, si no está lo suficientemente claro, porque es un poco difícil de explicar.

He intentado buscar esto, pero me consiguió en todo tipo de páginas, excepto en las páginas con una respuesta.

Gracias

¿Fue útil?

Solución

No estoy seguro si entiendo su problema correctamente, pero de acuerdo con lo que entendí, puede obtener el resultado deseado usando lo siguiente:

res = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date < '2011-01-12' AND dates.date > '2011-01-11'")

donde '2011-01-12' y '2011-01-11' son las fechas seleccionadas por el usuario.

Avíseme si esto es lo que estaba buscando o publica con más detalles.

Otros consejos

Ahora otra pregunta aparece en mi mente, pero no sé si eso es posible ... si te olvidas de la situación desde esta situación, ¿existe alguna posibilidad de que pueda verificar este tipo de asociaciones como así?

Una casa tiene 2 fechas adjuntas.

Un usuario selecciona 2 fechas.

Ahora solo quiero seleccionar la casa si estas 2 fechas corresponden.

Como esto:

@houses = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date = '2011-01-12' AND dates.date = '2011-01-11'")

Probé el código anterior y obtuve un SQL como este:

SELECT distinct houses.* FROM `houses` INNER JOIN dates ON dates.house_id = houses.id WHERE (dates.date = '2011-01-15' AND dates.date = '2011-01-22')

Pero no parece funcionar, ¿es esto posible en absoluto en una sola consulta o un solo hallazgo ()?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top