Forum: Rails France Grouper

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 12:11
(Received via mailing list)
Bonjour à tous,

Je vais tenter de vous exposer mon problème en essayant d'etre clair, en
gros je n'arrive pas à "lier" certaines tables,

J'ai une table "wines" qui ressemble à ceci :

wines
  -- id
  -- name
  -- color
  -- region_id
  -- appellation_id

exemple (1, "Mon vin", "Rouge", 1, 1)

J'ai egalement les tables regions et appellations qui ressemblent elles
à
ceci :

region
  -- id
  -- name

exemple (1, "Bordeaux")

appellation
  -- id
  -- bale

exemple (1, "Chateau du slip")

Voici ce que je souhaite faire (enfin mon client pas moi)

Afficher

- Region
  -- Couleur
    --- Appellation
      ---- Nom du vin

Vu la structure de mes tables, je ne vois pas comment cela est possible
mais
si vous aviez un exemple ou un tuto pour ce genre de truc, je vous en
serez
reconnaissant,

Merci d'avance
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 guillaume belleguic (Guest)
on 2008-12-02 12:19
(Received via mailing list)
bonjour,
tu part de wines et tu groupes les enregistrements trouvé suivant :
region_id
ensuite tu regroupe les tableaux résultant suivant couleur
ensuite tu regroupe les tableaux résultant appelation_id

group_by sur les tableaux pour êtres fainéant mais
pas forcement peformant...

Après ça doit être possible en sql pure.
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 12:55
(Received via mailing list)
Merci pour la réponse,
Malheureusement je ne comprends toujours pas comment faire



2008/12/2 guillaume belleguic <guillaume.belleguic@gmail.com>
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 guillaume belleguic (Guest)
on 2008-12-02 13:41
(Received via mailing list)
Wines.find(:all).group_by(&: region_id).each do |region_id,
region_wines| region_wines.group_by(&:color).each
do |color, color_wines|
  etc, etc
 end
end

c'est pas très propre mais ça a le mérite de marché rapidement.

mais il y a d'autre solution, en partant de région tu peux retrouver les
couleurs de tout tes vins et toutes les appellations, avec has_many :
 through
2008/12/2 Julien Castelain <jcastelain@gmail.com>
2fd0206c71a1b22a9cc6293f38537461?d=identicon&s=25 Cyril Mougel (shingara)
on 2008-12-02 14:05
(Received via mailing list)
Julien Castelain wrote:
>   -- color
>   -- name
>
> Afficher
>
> - Region
>   -- Couleur
>     --- Appellation
>       ---- Nom du vin
>

Tu fais dans le même ordre :

Region.all.each do |r|
  puts "- #{r.name}"
  r.wines.each do |w|
    puts "\t-- w.color"
    puts "\t\t --- w.appelation.name"
    puts "\t\t\t --- w.name"
  end
end

--
Cyril Mougel
http://blog.shingara.fr
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 14:54
(Received via mailing list)
Merci à vous, un grand pas a été franchi,
maintenant je vais tenter de regrouper le tout par région, couleur et
appellation car pour l'instant quand j'essaie d'afficher tout cela j'ai
encore

Bordeaux
   Rouge
      Haut Medoc
             Haut Medoc Rouge 1
Bordeaux
   Rouge
      Haut Medoc
             Haut Medoc Rouge 2
Bordeaux
   Rouge
      Haut Medoc
             Haut Medoc Rouge 3

et je voudrais

Bordeaux
   Rouge
      Haut Medoc
             Haut Medoc Rouge 1
             Haut Medoc Rouge 2
             Haut Medoc Rouge 3


C'est pas évident à comprendre les blocks en ruby, en tout cas c'est
très
sympa de votre part
Qui sait, il y aura peut etre du boulot pour quelqu'un si je persiste à
echouer

A +
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 15:55
(Received via mailing list)
Sinon, je me demandais si il n'y avait pas moyen de grouper tout cela
avec
GROUP BY

2008/12/2 Julien Castelain <jcastelain@gmail.com>
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 16:20
(Received via mailing list)
Bon je galère toujours autant,

Voici ce que j'ai fait

    @region = Region.find(:first, :conditions => ['name = ?',
'bordeaux'])

   @wines = Wine.find(:all, :conditions => ['color = ? AND region_id =
?',
      'rouge', @region.id],
      :order => 'name ASC')

    @wines = @wines.group_by(&:appellation_id).each do |appellation_id,
w|

    end

  Mais ça ressemble à n'importequoi, comment pourrais-je faire pour
sortir
une liste du style

   Region
        Couleur
            Appellation
                    Vin

Biens sur toutes ces infos (Region, Couleur, Appellation et Vin) ne
doivent
figurer qu'une fois dans cette liste
A les bonnes prises de tête quand on a un niveau de merde comme le mien
ça
fatique :)

Merci encore


2008/12/2 Julien Castelain <jcastelain@gmail.com>
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 16:32
(Received via mailing list)
Désolé de persiter, mais voila, j'ai un peu progréssé


Dans mon controlleur j'ai

@region = Region.find(:first, :conditions => ['name = ?', 'bordeaux'])
@wines = Wine.find(:all, :conditions => ['color = ? AND region_id = ?',
'rouge', @region.id], :order => 'name ASC')


Dans ma vue j'ai

<% @wines.group_by(&:appellation).each do |appellation, wines| %>
  <%= appellation.name %>
  <br />
  <% wines.each do |w| %>
    <%= w.name %><br />
  <% end %>
<% end %>

Exactement ce que je voulais, par contre, puis-je me servir du premier
exemple donné pour ne pas préciser la région et la couleur comme je l'ai
fait au dessus

Merci

2008/12/2 Julien Castelain <jcastelain@gmail.com>
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 guillaume belleguic (Guest)
on 2008-12-02 16:46
(Received via mailing list)
@wines = Wine.find(:all)

<% @wines.group_by(&:region_id) do |region_id, region_wines| %>
  <%= Region.find(region_id).name %>
  <% region_wines.group_by(&:color) do |color, color_wines| %>
    <%= color %>
    <% color_wines.group_by(&:appellation_id) do |appellation_id,
appellation_wines| %>
      <%= Appellation.find(appellation_id).label %>
      <% appellation_wines.each do |appellation_wine| %>
        <%= appellation_wine.name %>
      <% end %>
    <% end %>
  <% end %>
<% end %>

2008/12/2 Julien Castelain <jcastelain@gmail.com>
4a7f4bd240ef9f3af4f5550584599ffe?d=identicon&s=25 big choco (bigchoco)
on 2008-12-02 16:53
(Received via mailing list)
Merci guillaume,

J'allais justement répondre, par :

C'est encore moi,

J'ai encore changé de technique,


Dans mon controlleur,

@wines = Wine.find(:all)

dans ma vue

<% @wines.group_by(&:region).each do |region, regions_wines| %>
  <li>
    <a><%= region.name %></a>
    <ul>
    <% regions_wines.group_by(&:color).each do |color, colors_wines| %>
      <li>
        <%= color %>
        <ul>
        <% colors_wines.group_by(&:appellation).each do |appellation,
appellations_wines| %>
          <li>
            <%= appellation.name %>
            <ul>
            <% appellations_wines.each do |wine| %>
              <li><%= wine.name %></li>
            <% end %>
            </ul>
          </li>
        <% end %>
        </ul>
      </li>
    <% end %>
    </ul>
  </li>
<% end %>
</ul>

Pas très beau mais je pense que j'ai compris grâce à vous,  Donc un
grand *
merci* pour m'avoir supporté durant ce thread :)

Ah ruby quand tu nous tiens


2008/12/2 guillaume belleguic <guillaume.belleguic@gmail.com>
5183febd0dfb911f94c270ddd174fe71?d=identicon&s=25 guillaume belleguic (Guest)
on 2008-12-02 18:02
(Received via mailing list)
de rien...
Il est clair qu'il faudra par la suite trouver une autre solution, car
les
vues n'ont pas à faire se genre de traitement, penses y au moment du
refactoring.

2008/12/2 Julien Castelain <jcastelain@gmail.com>
This topic is locked and can not be replied to.