2013-08-17 6 views
6

मैं रेल 4.0.0 और डेविस 3.0.2 का उपयोग कर रहा हूं और डेविस रीडमे के भीतर this instruction के बाद मजबूत पैरामीटर्स के साथ डेविस को कॉन्फ़िगर करने का प्रयास कर रहा हूं।मजबूत पैरामीटर्स के साथ डिवाइस को अनुकूलित करना

मैं फिर application_controller.rb

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :nick 
    end 
end 

में इस तरह कोड लिखा था मैं http://localhost:3000/users/sign_up का दौरा किया। मैं एक NoMethodError in Devise::RegistrationsController#new मिला है, जो कहते हैं:

अपरिभाषित विधि <<' for {}:ActionController::Parameters

और सटीक लाइन मैं कहाँ लिखा devise_parameter_sanitizer.for(:sign_up) << :nick

को अंक क्या मैं गलत किया है? आपकी सहायता के लिए धन्यवाद.

+0

मैं बिल्कुल वैसा ही कोड की कोशिश की और एक ही त्रुटि मिलती है:

# Single field devise_parameter_sanitizer.for(:account_update) << :first_name # Multiple fields at a time devise_parameter_sanitizer.for(:account_update) << [:first_name, :last_name] 

लेकिन चेतावनी दी है, वर्तमान में यह एक रिलीज़ उम्मीदवार है। 'devise_parameter_sanitizer.for (: sign_up) 'एक खाली हैश देता है, इसलिए उस पर' << 'विधि को कॉल करना संभव नहीं है। मैंने [एक मुद्दा] सबमिट किया है [1], आप इसका अनुसरण कर सकते हैं। [1]: https://github.com/plataformatec/devise/issues/2574 –

+0

@ RafałCieślak आपकी पुष्टि के लिए धन्यवाद, मैं इस मुद्दे का पालन करूंगा। –

उत्तर

4

Jose Valim said के रूप में, यह डेविस 3.1.0.आरसी सुविधा है, यही कारण है कि यह काम नहीं करता है। आपको रीडमे में मौजूद अन्य वाक्यविन्यासों का उपयोग करना होगा।

5

प्रयास करें:

class ApplicationController < ActionController::Base 
     ... 
     before_filter :configure_permitted_parameters, if: :devise_controller? 
     ... 
     def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) { |u| 
      u.permit(:email, :password, :password_confirmation, :nick) 
     } 
     end 

यह मेरे लिए काम करता है! : डी

+0

क्या यह मॉडल में जाता है? –

+0

मैं एप्लिकेशन नियंत्रक में डालता हूं: पहले_फिल्टर: config_permitted_parameters, यदि:: devise_controller? –

4

एक समस्या वास्तव में आपकी समस्या से मेल खाती है: #2574 : devise_parameter_sanitizer.for(:sign_up) << :something raises an error

असल में, मजबूत पैरामीटर में कस्टम फ़ील्ड जोड़ने की विधि, यह एक नई सुविधा है जो डेविस 3.1 के साथ आ रही है।

चूंकि Rubygems.org में वर्तमान संस्करण 3.0.3 है, तो आप इस विधि का उपयोग अपने रेल परियोजना में अब नहीं कर सकते हैं। आप इस तरह चूक ओवरराइड करना होगा:

devise_parameter_sanitizer.for(:sign_up) do |u| 
    u.permit :email, :password, :password_confirmation, :first_name, :last_name 
end 


यदि आपको वास्तव में करने की जरूरत है, तो आप अपने Gemfile को संपादित करने और इस के साथ इस लाइन

gem 'devise', '3.0.3' 

जगह ले सकता है एक:

gem 'devise', github: 'plataformatec/devise', branch: 'master' 

तब आप सी एक आसानी से इस तरह अपने कस्टम फ़ील्ड जोड़ें: 3.1.0 RC1

+0

यह हमेशा छोटा विवरण है ... अगर वे मेरे जैसे खराब गितब नोब्स के लिए रीडमे में इसका उल्लेख करते हैं तो अच्छा होगा ... FWIW केवल एक चीज जिसने काम किया (वेब ​​पर कुछ अलग उदाहरणों को आजमाया) मेरे अटर्स को डाल रहा है कार्लोस जैसे u.permit समूह ऊपर उल्लेख करता है। – Danny

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