2012-06-29 17 views
6

मूल रूप से मैं परिवर्तन पासवर्ड के लिए दो अलग-अलग कार्रवाइयां रखना चाहता हूं और केवल एक के बजाय ईमेल बदलना चाहता हूं।डिलीज रजिस्ट्रेशन नियंत्रक के लिए कस्टम एक्शन संसाधन प्राप्त करने के लिए कस्टम कार्रवाई

मैंने अपने नए नियंत्रक को इंगित करने के लिए अपने मार्ग अपडेट किए हैं जो डेविस :: रजिस्ट्रेशन कंट्रोलर से प्राप्त होते हैं।

मेरे routes.rb:

devise_for :users, :controllers => { :registrations => "registrations" } 

devise_scope :user do 
    get "https://stackoverflow.com/users/password" => "registrations#change_password", :as => :change_password 
end 

मेरे registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    end 

end 

मेरे एप्लिकेशन/विचारों/वसीयत/पंजीकरण/change_password.html.erb

<%=debug resource%> 

देता है कौन सा मुझे शून्य

मुझे यहां क्या याद आ रही है?

धन्यवाद!

उत्तर

-3
class RegistrationsController < Devise::RegistrationsController 

    def change_password 
    super 
    @resource = resource 
    end 
end 

एप्लिकेशन/विचारों/वसीयत/पंजीकरण/change_password.html.erb

<%=debug @resource%> 
+0

मैं इस परीक्षण किया है और यह नहीं था:

class Devise::RegistrationsController < DeviseController ... prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy]' 

तो आप बस अपने change_password पद्धति पर कि फिल्टर को चलाने के लिए अपने कस्टम नियंत्रक बताने की आवश्यकता मेरे लिए काम नहीं करते क्योंकि 'डेविस :: रजिस्ट्रेशन कंट्रोलर' सुपरक्लास के पास 'सुपर' कीवर्ड के संदर्भ में कोई 'change_password' विधि नहीं है। – Zac

10

में वसीयत के अंतर्निहित registrations_controller.rb, वहाँ एक authenticate_scope! विधि है कि resource वस्तु आप देख रहे हैं बनाता है। यह एक prepend_before_filter द्वारा निष्पादित किया जाता है, लेकिन केवल कुछ तरीकों के लिए:

class RegistrationsController < Devise::RegistrationsController 

    prepend_before_filter :authenticate_scope!, :only => [:change_password] 

    def change_password 
    end 

end 
+1

मुझे लगता है कि आपको केवल ': change_password' निर्दिष्ट करने के बजाय उन डिफ़ॉल्टों में ': change_password' क्रिया' संलग्न करना होगा। [: संपादित करें, अपडेट करें: नष्ट करें] '। मेरे इसी तरह के मामले में, मेरे पास ': finish' नामक क्रिया है, और यदि मैं 'केवल:: finish' निर्दिष्ट करता हूं, तो' संसाधन '' nil'' संपादन 'कार्रवाई के लिए है – chaimann

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