2013-06-14 8 views
6

मेरे पास Accounts मॉडल है जो डेविस के साथ स्थापित है। डेविस कुछ विशेषताओं (जैसे ईमेल, पासवर्ड इत्यादि) का उपयोग करता है लेकिन मेरे पास कुछ अन्य विशेषताएं हैं जो मैंने बनाई हैं। साइन अप पर, मैं उन्हें एक तरह से सेट करना चाहता हूं।विस्तारित वितरण पंजीकरण नियंत्रक

मैं पंजीकरण नियंत्रक का विस्तार कैसे कर सकता हूं? मैं समझता हूँ कि मैं वास्तव में इस तरह एक नया नियंत्रक भी बनाना होगा:

class AccountsController < Devise::RegistrationController 
    def create 
    super 
    end 
end 

मैं सिर्फ सही super के बाद मेरे कोड जोड़ सकते हैं? मुझे लगता है कि यह बहुत देर हो जाएगी क्योंकि संसाधन पहले ही सहेजा जा चुका था। ऐसा करने का सबसे अच्छा तरीका क्या है?

अगर मुझे स्क्रैच से लिखना था, तो मुझे कैसे पता चलेगा कि मुझे कुछ भी याद नहीं आया जो डेविस करता है?

धन्यवाद,

उत्तर

2

आपको पूर्ण नियंत्रण के लिए खरोंच से नियंत्रक को फिर से लिखने registration_controller.rb Source Code के साथ शुरू और आवश्यक के रूप में अपने परिवर्तनों को बनाना चाहते हैं।

अपने कस्टम नियंत्रक का उपयोग करने के लिए वसीयत बोलने रूट बदलकर के रूप में सरल है:

devise_for :users, :controllers => { :registrations => "users/custom_controller" } 
+0

क्या यह विस्तार करने का सबसे अच्छा तरीका है? यह केवल दो विशेषताएं हैं जिन्हें मुझे जोड़ने की ज़रूरत है। इसके अलावा, आप डेविस को कैसे कहते हैं कि मेरे पास एक नया नियंत्रक है (ताकि यह मणि में किसी का उपयोग न करे)? – darksky

+0

@ डार्कस्की बेस्ट? मुझे बिल्कुल यकीन नहीं है। आप इसे आज़मा सकते हैं और देख सकते हैं कि यह कैसा लगता है।मैंने अपने नए नियंत्रक के बारे में बताने के बारे में एक स्पष्टीकरण के साथ अपना जवाब अपडेट किया। – Josh

+0

क्या होगा यदि मैं केवल इसे पुनर्निर्माण किए बिना ओवरराइड करना चाहता हूं - कोई ऐसा कैसे कर सकता है? – BKSpurgeon

0

नियंत्रक का विस्तार करने की आवश्यकता नहीं है आप उपयोगकर्ता की आपूर्ति की जानकारी के लिए खेतों चाहते हैं।
यदि आप उन्हें स्वचालित रूप से जोड़ना चाहते हैं, तो पर मॉडल में ऐसा करने का कोई कारण नहीं है!

1 मामले में (जब तक यह सत्र या अनुरोध पर निर्भर करता है), https://github.com/plataformatec/devise#configuring-views

आप वसीयत नियंत्रक बदलना चाहिए केवल अगर आप साइन अप करने के बदलने का इरादा देखते हैं।

+0

लेकिन 'first_save' करना और एक विधि को कॉल करना जो मॉडल ब्रेक में कुछ मान सेट करता है और साइन अप ठीक से काम नहीं करता है। – darksky

+0

आपको क्या त्रुटि मिलती है? –

+0

यह मुझे लॉगिन करने और मुख्य पृष्ठ पर रीडायरेक्ट करने के लिए साइन अप नहीं करेगा (w/o प्रमाणीकरण उपयोगकर्ता और पास)। मैं इसके बजाय डेटाबेस में डिफ़ॉल्ट मान सेट अप समाप्त हो गया। – darksky

9

Devise documentation के अनुसार, हाँ, जोश के उत्तर की तरह, आप नियंत्रक को बदल देंगे। हालांकि, आपको पूरी तरह से खरोंच से शुरू करने की ज़रूरत नहीं है। प्रलेखन पर एक नज़र डालें।

आप नियंत्रक उत्पन्न कर सकते हैं ताकि आप अनुकूलन जोड़ने के लिए कर सकते हैं:

rails generate devise:controllers users 

यह आपको एक में नियंत्रक देता है:

Example: rails generate devise:controllers [scope] 

तो, आप अपने उपयोगकर्ता क्षेत्र के लिए निम्नलिखित चला सकते हैं यहां स्थित फ़ोल्डर: ऐप/नियंत्रक/उपयोगकर्ता

फिर, अपनी मार्ग फ़ाइल को बताएं उस नियंत्रक का प्रयोग करें। इस तरह दिखने के लिए अपने तैयार मार्ग को अपडेट करें:

devise_for :users, controllers: { sessions: "users/sessions" } 

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

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