Optimisation de code

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

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 [email protected]:

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 :wink:


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

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

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 C. || fuse
http://www.noremember.org

On 26 juin, 13:22, philippe lachaise [email protected]
wrote:

Je réserverai le suffixe “_id” pour les foreign keys sinon

my 2 cents :wink:


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

Je vais faire des tests.

Merci