2011-10-11 14 views
5

मेरे पास एक उपयोगकर्ता मॉडल है। उपयोगकर्ताओं में से 3 भूमिकाएं हो सकती हैं: role1, role2, role3। यह उपयोगकर्ता मॉडल में 'भूमिका' कॉलम द्वारा दर्शाया गया है। प्रत्येक भूमिका में एक अद्वितीय प्रोफ़ाइल है। role1_profile, role2_profile, role3_profile। प्रत्येक * _profile एक मॉडल है।रेल में वैकल्पिक या सशर्त मॉडल संघ

मैं रेल में इस वैकल्पिक सहयोग का प्रतिनिधित्व कैसे करूं?

मैं इसे दो अलग अलग तरीकों की कोशिश की है:

class User < ActiveRecord::Base 
    #FIRST WAY 
    if current_user.role == 'role1' then has_one :role1_profile end 
    #SECOND WAY 
    has_one :role1_profile, :conditions => ['user.role = ?', 'role1'] 
end 

लेकिन वह काम नहीं करता। ऐसा करने का सही तरीका क्या है?

उत्तर

4

संघों को सशर्त होने का इरादा नहीं है। चीजों को इस तरह से रखना शायद सबसे आसान है।

User और विभिन्न भूमिका प्रोफाइल के बीच एक पॉलिमॉर्फिक एसोसिएशन होने के बारे में कैसे?

class User 
    belongs_to :role_profile, :polymorphic => true 
end 

class RoleXProfile 
    has_many :users, :as => :role_profile 
end 

बेशक, आप अपने उपयोगकर्ताओं को मेज पर role_profile_id और role_profile_type फ़ील्ड्स जोड़ने के लिए की आवश्यकता होगी।

कोई फर्क नहीं पड़ता कि आप क्या करते हैं, आपको उपयोगकर्ता की भूमिका या भूमिका_प्रोफाइल की जांच करने की आवश्यकता होगी जहां भी आप इसका इस्तेमाल करेंगे।

+0

+1 क्योंकि मैं कोड टाइप करने के लिए बहुत आलसी था। –

+0

धन्यवाद! मुझे लगता है कि आपका समाधान सही है। रेल में हमेशा एक रास्ता है, लेकिन जब आप रास्ता नहीं जानते हैं, तो आप एक अजीब तरीके से समाधान को लागू करते हैं। – hrdwdmrbl

+0

@jackquack मुझे नहीं लगता कि आपका दृष्टिकोण बिल्कुल अजीब था। काफी विपरीत, यह बहुत तार्किक था। और यह एक ऐसे स्थान को इंगित कर सकता है जहां ActiveRecord को बेहतर/बढ़ाया जा सकता है। वैसे भी, मुझे खुशी है कि आपको चीजें काम कर रही हैं। –

4

आप इसके बजाय polymorphic association पर विचार करना चाहेंगे और केवल उचित भूमिका प्रोफाइल रख सकते हैं।

मेरी समझ यह थी कि :conditionsसंबंधित मॉडल को पूरा करना होगा (लेकिन मैं उस पर गलत हो सकता हूं)।

किसी भी मामले में, मुझे लगता है कि आप वास्तव में यह अधिक कठिन बना रहे हैं और वास्तव में इन संबंधों को सशर्त बनाकर आपको क्या चाहिए।

+0

+1 क्योंकि एक आलसी प्रोग्रामर एक अच्छा प्रोग्रामर है :) और एसोसिएशन –

+0

@WizardofOgz के लिए उपयोग की जाने वाली स्थितियों के बारे में नोट के लिए मैं अपने मालिक को यह कहता रहता हूं! मुझे लगता है कि यह था ... हेमलेट? जिन्होंने कहा "आलस्य से बाहर नवाचार आता है।" –

+0

आप बिल्कुल सही हैं! कोड में शामिल होने के बाद से मैंने विज़ार्ड को क्रेडिट दिया था। :) – hrdwdmrbl

संबंधित मुद्दे