Bonjour,

On 16 sep, 22:06, Meshak <[email protected]> wrote:

> Je pencherai pour un problème de ressources / performances pour
> plusieurs raisons :
>   - l'aspect aléatoire
>   - le "ActionView::TemplateError"
>   - "self.attributes[...]" qui délègue en réalité à
> "self.read_attribute(...)"
>   - le fait qu'il y ait un has_many de has_many de 7000
> résultats... :-)
>
> Deux petites questions :
>   - quelle version de Rails ?

2.3.2

>   - lors d'un rendu, tes logs sont-ils polués par N fois le même type
> de requête ?

Oui et non. Lorsque j'ai rencontré le pb pour la première fois, en
effet, mes
logs étaient remplis de
SELECT "bodies".* FROM "bodies" INNER JOIN "bodies_encounters" ON
"bodies".id = "bodies_encounters".body_id WHERE
(("bodies_encounters".encounter_id = 14275))

J'ai suspecté alors un problème de surcharge, et j'ai transformé mon

@encounters = Encounter.all
en
@encounters = Encounter.all(:include => :bodies)

mais cela n'a pas changé grand chose : ça plante toujours avec la
version
originale de mon code. au lieu de planter à la suite d'un select, ça
plante
pendant le rendu (à un endroit indéterminé...)

Par contre, j'avais le même type d'erreur (plantage sur la méthode
designation
avec cascade sur les dates) à un autre endroit de mon application, et
ce plantage
a disparu quand j'ai ajouté les (:include => :bodies)

> Même si je me trompe, les points suivants ne feront pas de mal :
>   - vérifier la relation entre Body et Encounters, on est bien au
> final sur du 1-N ?

Non. on est sur du N-N (une Encounter contient 2 Bodies et un Body
peut être dans N Encounters)

class Body < ActiveRecord::Base
        has_many :bodies_encounters
        has_many :encounters, :through => :bodies_encounters

class Encounter < ActiveRecord::Base
        has_many :bodies_encounters
        has_many :bodies, :through => :bodies_encounters

>   - vérifier que tes "include" sont bien en place, ex :
>       Body.all(:include => { :bodies_encounters => :encounters })

Pour les .all oui.

>   - éviter "self.attributes"

Grande question : pourquoi ?

> Note : "b1.class.to_s.eql?('Planet')" peut s'écrire "b1.instance_of?
> (Planet)" (voir aussi la méthode "is_a?")

Merci !


--~--~---------~--~----~------------~-------~--~----~
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 à