2011-01-11 11 views
41

मेरे पास एक ऐसा फॉर्म है जहां मैं रेल में बहुत सारी जानकारी एकत्र करता हूं। इस फॉर्म का एक हिस्सा नए उपयोगकर्ता के पंजीकरण के लिए फ़ील्ड है। चूंकि डेविस में विशेष रूप से एक नया उपयोगकर्ता बनाने के लिए नियंत्रक/क्रियाएं होती हैं, इसलिए मुझे नहीं पता कि कैसे प्रोग्राम को पूरी तरह से अलग-अलग क्रिया में उपयोगकर्ता बनाना है जो एक और रिकॉर्ड भी बनाता है। मैं वास्तव में उपयोगकर्ता पंजीकरण फार्म अलग नहीं हो सकता है। मैं यह नहीं समझ सकता कि उपयोगकर्ता कैसे बनाया जाए, और उसके बाद उपयोगकर्ता को लॉग इन करें, जैसे कि मैं आसानी से एथलॉगिक में कर सकता हूं।डेविस में मैन्युअल रूप से नया उपयोगकर्ता और उपयोगकर्ता सत्र कैसे बनाएं?

मैंने औथ्लोगिक और डेविस दोनों का उपयोग किया है, और सोचते हैं कि प्रत्येक में उनकी ताकत और कमजोरियां हैं। डेविस के साथ, मुझे एक नई परियोजना के साथ "जाने" कितनी जल्दी है, लेकिन इसे अनुकूलित करना एक दर्द लगता है। कुछ समय पहले एथलॉगिक को रेल 3 के साथ इतनी सारी समस्याएं थीं, कि मैंने डेविस पर स्विच किया। अब मैं एक नई परियोजना पर काम कर रहा हूं और स्क्रैच से शुरू करना चाहता हूं।

तो मुझे लगता है कि इस प्रश्न के 2 संभावित उत्तर हैं: (ए) डेविस में ऐसा कैसे करें, या (बी) मुझे इसके बजाय रेल 3 के साथ एथलॉगिक क्यों स्विच करना चाहिए।

+0

आपका स्वीकार्य उत्तर डेविस और एथलॉगिक दोनों के लिए काम करता है। –

उत्तर

76

आप बस एक नया उपयोगकर्ता मॉडल बनाने के द्वारा एक नई वसीयत उपयोगकर्ता बना सकते हैं (https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface देख)

@user = User.new(:email => '[email protected]', :password => 'password', :password_confirmation => 'password') 
@user.save 

अपने नव निर्मित उपयोगकर्ता को प्रवेश करने के लिए, sign_in @user

+0

सटीक कोड भी ऑथलॉगिक के लिए काम करता है (मैं संस्करण 1.4.4.1 चला रहा हूं)। –

+0

इसके लिए प्रलेखन कहां है .. जैसा कि कोई जानता है कि साइन_इन नामक एक फ़ंक्शन मौजूद है – codeAnand

+2

आप इसे https://github.com/plataformatec/devise पर रीडमे में "परीक्षण सहायक" अनुभाग में देख सकते हैं अधिक विशेष रूप से , आप यहां प्रलेखन देख सकते हैं: http://rubydoc.info/github/plataformatec/devise/master/frames –

7

का उपयोग sign_in से पहले नव निर्मित उपयोगकर्ता सहेजा जा रहा है विफल हो जाएगा क्योंकि देवता ने अभी तक उपयोगकर्ता ऑब्जेक्ट के लिए आवश्यक फ़ील्ड भर नहीं पाए हैं। तो डेविड का कोड वर्तमान पृष्ठ के लिए काम करेगा, लेकिन अगला पृष्ठ साइन इन उपयोगकर्ता नहीं मिलेगा, क्योंकि उपयोगकर्ता सत्र सेट होने के बाद ही सहेजा जाता है। ऐसा तब होता है जब मैं मोंगोइड का उपयोग करता हूं, और मुझे नहीं पता कि यह मोंगोद के लिए विशिष्ट समस्या है या नहीं।

इस समस्या को हल करने के लिए, मुझे साइन_इन को दो बार कॉल करने के लिए एक बहुत ही अपूर्ण समाधान है। पहला साइन_इन उपयोगकर्ता को सहेज लेगा। यह सिर्फ काम करता है लेकिन लोग निश्चित रूप से इसे सुधार सकते हैं।

@user = User.new(:email => '[email protected]', 
       :password => 'password', 
       :password_confirmation => 'password') 
# This will save the user in db with fields for devise 
sign_in @user 
# :bypass is set to ignore devise related callbacks and only save the 
# user into session. 
sign_in @user, :bypass => true 
+2

क्या मैं पूछ सकता हूं कि समस्या तब भी होती है जब आप साइन_इन को कॉल करने से पहले उपयोगकर्ता को स्पष्ट रूप से सहेजते हैं? और यदि यह काम नहीं करता है, तो सहेजने के बाद उपयोगकर्ता को पुनः लोड करने के लिए कॉल जोड़ रहा है लेकिन साइन_इन से पहले? – m3z

4

इस सवाल को देखकर नए लोगों के लिए ...

यह करने के लिए एक आसान तरीका अपने

config/routes.rb 

में है आप निम्नलिखित की तरह एक लाइन होना चाहिए:

devise_for :users 

इसलिए, आपको बस एक पथ उपसर्ग जोड़ना होगा जो तैयार करेगा:

devise_for :users, :path_prefix =>'auth' 

उम्मीद है कि यह मदद करता है!

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