Forum: Rails France Optimisation de code

Posted by Tranquiliste (Guest)
on 2009-06-26 11:45
(Received via mailing list)
Bonjour,

J'aimerai un conseil sur l'optimisation de code. J'ai plusieurs
modèles

building
 has_many roles

role (qui porte aussi le type de role, admin, proprio,
locataire, ...)
belongs_to building
belongs_to user

user
has_many roles

Et j'ai un certain nombre de methodes qui ressemblent à :

def find_admins_of
  roles = self.roles
 admins = []
 for role in roles
   admins << User.find(role.user_id) if role.role_type_id ==
Role::ADMIN
 end
admins
end

J'ai bien conscience que ce n'est sans doute pas la meilleure méthode,
car beaucoup de requêtes sont générées. J'ai pensé à faire un
has_many, through
mais je n'arrive pas à trouver le bonne syntax pour mettre la
condition sur le role.role_type_id (sur le model role)

Merci de votre aide
Nicolas
Posted by Nicolas Blanco (slainer68)
on 2009-06-26 12:07
(Received via mailing list)
Salut, sans rentrer dans les détails spécifiques de ton problème...
Mais lorsque j'ai du code qui se répète dans les modèles, je crée un
plugin ActiveRecord tout simplement.

Style acts_as_machin, has_a_machin, etc.
Au début ça me faisait peur de créer des plugins, c'est plus le cas
désormais :).

Ça permet déjà de DRY-ifier un peu le code en attendant de l'optimiser
davantage.

Nicolas (Novelys).

2009/6/26 Tranquiliste <nicolas.aguttes@googlemail.com>:
Posted by philippe lachaise (Guest)
on 2009-06-26 13:23
(Received via mailing list)
>>
for role in roles
  admins << User.find(role.user_id) if role.role_type_id ==
Role::ADMIN

Tu pourrais pas faire un truc genre :

admins = User.all( :condition => ['role.role_type_id = ?', Role::ADMIN 
],
:include => :role ]

BTW : role_type ils fait aussin l'objet d'une table ?
Je réserverai le suffixe "_id" pour les foreign keys sinon

my 2 cents ;-)

--
IciMarché fédère l'e-commerce de proximité
http://icimarche.fr
Posted by Tranquiliste (Guest)
on 2009-06-26 13:55
(Received via mailing list)
On 26 juin, 13:22, philippe lachaise <philippe.lacha...@gmail.com>
wrote:
> Je réserverai le suffixe "_id" pour les foreign keys sinon
>
> my 2 cents ;-)
>
> --
> IciMarché fédère l'e-commerce de proximitéhttp://icimarche.fr

Sauf que je veux récupérer tous les admin de mon building. Le modele
role faisant le lien entre les buildings et les users avec user_id,
building_id et role_type_id

Nicolas
Posted by philippe lachaise (Guest)
on 2009-06-26 14:06
(Received via mailing list)
>> Sauf que je veux récupérer tous les admin de mon building. Le modele role
faisant le lien entre les buildings et les users avec user_id, 
building_id
et role_type_id

qqchose comme ça :

admins = User.all( :condition => ['role.role_type_id = ? AND
role.building_id = ?', Role::ADMIN, @building.id  ], :include => :role ]


--
IciMarché fédère l'e-commerce de proximité
http://icimarche.fr
Posted by Martin Catty (Guest)
on 2009-06-26 14:11
(Received via mailing list)
Tranquiliste a écrit :
> belongs_to building
>  for role in roles
> condition sur le role.role_type_id (sur le model role)
Si j'ai bien compris ton modèle role est entre building et user.
Je dirai qu'il te faut quelquechose dans le genre:

class Building < ActiveRecord::Base
   has_many :roles

   has_many :admins, :through => :roles, :source => :user,
            :conditions => { :roles => { :role_type_id => Role::ADMIN } 
}
end


--
Martin Catty || fuse
http://www.noremember.org
Posted by Tranquiliste (Guest)
on 2009-06-26 14:12
(Received via mailing list)
Je vais faire des tests.

Merci
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.