Hou que c'est pas beau, un champs "id" qui peut avoir plusieurs fois la même
valeur.

Ce serait mieux de l'appeler "table1_id" histoire de montrer que c'est l'id
d'un table1 (quoi qu'un table1 puisse être). D'ailleurs, vu que les table1s
on un name, c'est peut-être des people (singulier : person), et ce serait
mieux d'appeller la table people du coup, et l'objet modèle Person semblera
tout naturel. En plus, comme les table2s sont apparemment des évènements, on
pourrait les appeler Event, et ça ferait une table nommée events. On
progresse. Du coup, on pourrait même écrire ça :

Dans app/models/person.rb

class Person
has_many :events
named_scope :with_events, :include => :events
end

Dans app/models/event.rb

class Event
belongs_to :person
named_scope :with_person, :include => :person
end

Du coup tu pourrias écrire des truc fabuleux comme :

Person.with_events.find :all

Et il ferait la jointure tout seul comme un grand.

Mais les conventions sont des trucs chiants qui servent à rien, après tout
on peut très bien appeller des choses "truc", "machin", "toto", ou "table1"
et ça marche, non ? Quoi, ça rend le code plus lisible en incitant à
déclarer son intention, et ça facilite l'écriture de la suite en fournissant
des méthodes triviales qui marchent bien ? Ta ta ta, c'est pour les amateurs
ça. Vaut mieux nommer ses tables table1, table2, etc., comme ça quand on
veut en rajouter une, eh bien on l'appelle tablen+1 et y'a pas besoin de se
casser la tête. D'ailleurs, on devrait faire la même chose avec les champs,
les appeller champs1, champs2, champs3, etc., sauf les id pour les jointures
qu'on appellerait just "id" que ce soit une clef primaire, étrangère, etc.
C'est tellement plus fun, c'est comme un puzzle, à chaque fois on a le
plaisir de retrouver un gros sac de noeuds et on passe des après-midi super
à tout démêler.

Michel Belleville


2009/7/13 Renaud Huillet <[email protected]>

>
> Hello !
> J aie beau chercher, je ne comprends pas ce que je fais de faux dans ce
> cas basique: une jointure avec 2 tables:
>
> def self.jointure
>  conditions="table1.id = table2.id"
>  my_results=self.find(:all, :include=>'table2', :conditions=>
> [conditions])
>  result_details = my_results[0]
>  for res in result_details.table2 do
>    logger.debug "nb  hits #{res.nb_hits}"
>  end
>  return my_results
> end
>
> Les données:
> table1:
>       id     name
>       1      toto
> table2:
>       id      nb_hits    log_date
>       1       10         2009/01/01
>       1       16         2009/01/02
>
> Lors dela jointure, les logs me sortent 2 lignes , jusque la ça va, mais
> c est 2 fois la même :(
> nb hits 16
> nb hits 16
>
> Je craque un peu , a l aide !
> Renaud
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à