Grüßen,Filtering Kind-Objekte in einer has_many: durch Beziehung in Rails 3
ich eine Anwendung, wo Companies
und Users
müssen miteinander durch ein CompanyMembership
Modell gehören, die über die Mitgliedschaft zusätzliche Informationen enthalten (genauer gesagt, ob der Benutzer ein Administrator der Firma ist, über einen booleschen Wert admin
). Eine einfache Version des Codes:
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
Natürlich, das macht es einfach, alle Mitglieder eines Unternehmens über company.users.all
, et al zu erhalten. Ich versuche jedoch, eine Liste aller Benutzer in einem Unternehmen zu erhalten, die Administratoren dieses Unternehmens sind (und auch zu testen, ob ein Benutzer ein Administrator eines bestimmten Unternehmens ist). Meine erste Lösung wurde im Anschluss an die in company.rb
:
def admins
company_memberships.where(:admin => true).collect do |membership|
membership.user
end
end
def is_admin?(user)
admins.include? user
end
Das funktioniert zwar, etwas fühlt sich ineffizient darüber (es ist über jede Mitgliedschaft laufen, SQL jedes Mal ausgeführt wird, richtig oder ist von Beziehungen mit intelligenter als das?) Und ich bin mir nicht sicher, ob es einen besseren Weg gibt, um das zu tun (vielleicht mit Scopes oder den schicken neuen Relation
Objekten, die Rails 3 benutzt?).
Jeder Rat auf dem besten Weg zu verfahren (vorzugsweise mit Rails 3 Best Practices) würde sehr geschätzt werden!
Ein Schritt näher! Obwohl es nicht die Antwort ist, nach der ich gesucht habe, hat es mich dazu geführt :) –