अभिवादन में संबंध के माध्यम से,छनन बच्चे को एक has_many में वस्तुओं: रेल 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
हालांकि यह काम करता है, कुछ (, यह प्रत्येक सदस्यता से अधिक पुनरावृत्ति है, एसक्यूएल हर बार निष्पादित करने का अधिकार या संबंध है कि अधिक चालाक है??) इसके बारे में अक्षम महसूस करता है, और मैं मुझे यकीन नहीं है कि इस बारे में जाने का कोई बेहतर तरीका है (शायद स्कॉप्स या फैंसी नई Relation
ऑब्जेक्ट्स का उपयोग करके रेल 3 का उपयोग करता है?)।
प्रक्रिया के सर्वोत्तम तरीके (अधिमानतः रेल 3 सर्वोत्तम प्रथाओं का उपयोग करके) पर कोई सलाह बहुत सराहना की जाएगी!
एक कदम करीब! जबकि यह वह उत्तर नहीं है जिसे मैं ढूंढ रहा था, यह मुझे इसके लिए नेतृत्व किया :) –