Question

Je suis assez nouveau dans les rails, et le problème que je tombe est décrit comme suit:

Tout d'abord, il y a une table avec des maisons. Les maisons ont plusieurs dates associées à Has_many: Dates

Deuxièmement, il y a le tableau avec des dates. Les dates ont l'association appartient_to: maison

Maintenant, dans une recherche, un utilisateur peut sélectionner un début et une date finale. Et ce que je veux faire, c'est rechercher chaque maison pour ses dates et vérifier si celles-ci sont entre le début et la date finale. Si une ou plusieurs des dates se trouvent à la date de début / fin, elle doit être trouvée.

Ce sont mes conditions pour rechercher une maison pour d'autres critères:

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

J'ai créé une méthode pour créer des conditions valides avec ces paramètres.

Veuillez me dire que si ce n'est pas assez clair, car c'est un peu difficile à expliquer.

J'ai essayé de chercher cela, mais cela m'a fait sur toutes sortes d'autres pages, sauf les pages avec une réponse.

Merci

Était-ce utile?

La solution

Je ne sais pas si je comprends correctement votre problème, mais selon ce que j'ai compris, vous pouvez obtenir le résultat souhaité en utilisant les éléments suivants:

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'")

Lorsque «2011-01-12» et «2011-01-11» sont les dates sélectionnées par l'utilisateur.

Faites-moi savoir si c'est ce que vous recherchiez ou publiez avec plus de détails.

Autres conseils

Maintenant, une autre question me vient à l'esprit, mais je ne sais pas si cela est possible .. Si vous oubliez le from pour cette situation, y a-t-il une possibilité que je puisse vérifier ce genre d'associations comme ainsi:

Une maison a 2 dates attachées.

Un utilisateur sélectionne 2 dates.

Maintenant, je ne veux sélectionner la maison que si ces 2 dates correspondent.

Comme ça:

@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'")

J'ai essayé le code ci-dessus et j'ai obtenu un SQL comme ceci:

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')

Mais cela ne semble pas fonctionner, est-ce possible du tout dans une seule requête ou une seule recherche ()?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top