Problème métier - Requête avec jointur e

Bonjour,

Je développe une application web dont un module gère des fiches de
concessionnaires scooter.
Voici rapidement mon architecture :
fiche.rb :
has_many :categories
category.rb :
belongs_to :fiche
has_many :scooters
scooter.rb :
belongs_to :category

Je souhaiterai afficher 4 photos de scooters (colonne image dans
scooters) aléatoirement selon une fiche scooter spécifique (j’ai son
id).

J’ai essayé de “jouer” avec mes models, en vain.
J’essaye de créer une fonction dans Fiche.rb.

def scooters
if not self.id.nil?
return Scooter.find( :all, :include =>
[:categories], :conditions =>
{ :liaison_entre_fiches_categories_scooters => self.id})
end
end

Apparemment l’inclusion de la table categories dans ma requête ne se
fait pas, puis je ne sais comment spécifier une colonne de la table
inclus.
Comment puis je résoudre mon problème s’il vous plait ?
Je vous en remercie par avance.

Cordialement,
Morgan FITUSSI

Bonsoir Morgan,

pourrais-tu préciser le but de ta requête s’il te plaît?
Si je comprends bien tu souhaites, à partir d’une fiche, récupérer
l’ensemble des scooter qui appartiennent à une catégorie spécifique.

Est-ce bien cela?

Bonsoir,

Plus clairement, je souhaiterai récupérer 4 scooters aléatoirement,
mais ces scooters doivent appartenir à une fiche (à un
concessionnaire) précise (exemple, une fiche avec pour id 1). La
catégorie n’a pas réellement d’importance dans ma requête. C’est juste
une table / modèle liant les fiches / concessionnaires aux scooters.
En SQL, ca donnerai une requête comme :

SELECT scooters.image
FROM fiches, categories, scooters
WHERE fiches.id = categories.fiche_id
AND categories.id = scooters.category_id
AND fiches.id = 1
ORDER BY RAND()
LIMIT 0, 4;

J’espère avoir été plus clair, si il faut je fournirai des parties de
codes et extraits de base de données.

Cordialement,
Morgan FITUSSI

Ok, tu peux le faire en mettant une association has_many :scooters,
:through
=> :fiches dans ton Concessionnaire, ensuite tu peux faire quelque chose
du
genre :

Concessionnaire.find(concessionnaire_specifique_id, :include =>
:scooters,
:order => ‘RAND()’, :limit => 4)


Michel B.

Merci beaucoup c’est exactement ce que je cherchais !

J’ai donc mis dans fiche.rb :
has_many :scooters, :through => :categories

Puis toujours dans fiche.rb, j’ai créé une méthode :
def scooters_random
result = Scooter.find( :all, :include =>
{:category, :fiche}, :conditions => [ “fiches.id = ? AND
scooters.url_photo != ‘’”, self.id], :order => ‘RAND()’, :limit => 4)
list = []

result.each do |scooter|
if not scooter.url_photo.nil?
list << scooter unless File.exists?( scooter.url_photo)
end
end
list
end

La méthode fait correctement son travail, mais elle vous semble ruby
way ?

Encore merci !

Cordialement,
Morgan FITUSSI

On 8 sep, 21:11, “Michel B.” [email protected]

La méthode fait correctement son travail, mais elle vous semble ruby
way ?

j’ai pas trop suivi le début, mais tu sais que si t’as pas de bol que
tu tombes sur des scooters sans photo ta liste sera vide ?

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

Oui je m’en suis rendu compte, as tu quelque chose à me conseiller ?

On 9 sep, 11:37, “Guillaume B.” [email protected]

Oui je m’en suis rendu compte, as tu quelque chose à me conseiller ?

Ca dépend de l’importe que tu attaches au fait d’avoir ou pas une
photo. Si tu veux absolument une photo, tu fais ton tirage au sort sur
les photos au lieu de les faires sur les scooter (et après à partir de
la photo tu peux avoir le scooter facilement)

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres.
Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/
Browser le web : http://www.mozilla-europe.org/fr/products/firefox/
Suite bureautique : http://fr.openoffice.org/

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs