問候關係,過濾孩子在的has_many對象:通過對Rails 3個
我有一個應用程序,Companies
和Users
需要通過CompanyMembership
模型,其中包含有關會員額外的信息,屬於彼此(特別是,無論用戶是否是公司的管理員,都通過布爾值admin
)。代碼的簡化版本:
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
當然,這可以很方便地通過company.users.all
,等人得到了公司的所有成員。但是,我正在嘗試獲取公司中所有用戶的列表,該列表是該公司的管理員(也用於測試用戶是否爲特定公司的管理員)。我的第一個解決方案是在company.rb
如下:
def admins
company_memberships.where(:admin => true).collect do |membership|
membership.user
end
end
def is_admin?(user)
admins.include? user
end
雖然這個作品,有什麼感覺低效它(它遍歷每個成員,每次執行SQL,正確的還是關係更聰明?)和我我不確定是否有更好的方法可以解決這個問題(也許使用示波器或Rails 3使用的新對象?)。
任何有關最佳處理方式(最好使用Rails 3最佳實踐)的建議將不勝感激!
更靠近!雖然這不是我正在尋找的答案,但它讓我感到它:) – 2010-09-21 14:47:37