Salutations,enfant Filtrage des objets dans une has_many: par rapport à Rails 3
J'ai une application où Companies
et Users
doivent appartenir à l'autre par un modèle CompanyMembership
, qui contient des informations supplémentaires sur les membres (en particulier, si l'utilisateur est ou non un administrateur de l'entreprise, via une valeur booléenne admin
). Une version simple du code:
class CompanyMembership < ActiveRecord::Base
belongs_to :company
belongs_to :user
end
class Company < ActiveRecord::Base
has_many :company_memberships
has_many :users, :through => :company_memberships
end
class User < ActiveRecord::Base
has_many :company_memberships
has_many :companies, :through => :company_memberships
end
Bien sûr, cela rend simple d'obtenir tous les membres d'une entreprise par l'intermédiaire company.users.all
, et al. Cependant, j'essaie d'obtenir une liste de tous les utilisateurs d'une société qui sont des administrateurs de cette société (et aussi de tester si un utilisateur est un administrateur d'une entreprise donnée). Ma première solution était la suivante en company.rb
:
def admins
company_memberships.where(:admin => true).collect do |membership|
membership.user
end
end
def is_admin?(user)
admins.include? user
end
Bien que cela fonctionne, quelque chose se sent inefficace à ce sujet (il est itérer sur chaque membre, exécutant SQL à chaque fois, à droite ou est la relation plus intelligent que ça?), Et je Je ne suis pas sûr s'il y a une meilleure façon d'y parvenir (peut-être en utilisant des étendues ou les nouveaux objets fantaisie Relation
que Rails 3 utilise?).
Tout conseil sur la meilleure façon de procéder (de préférence en utilisant les meilleures pratiques de Rails 3) serait grandement apprécié!
Un pas de plus! Bien que ce ne soit pas la réponse que je cherchais, elle m'a conduit :) –