2016-07-06 61 views
10

Sto impazzendo con un errore che mi capita ogni volta che provo a cantare/cantare nella mia rete.Devise NoMethodError 'per' ParameterSanitizer

tronchi Heroku:

Started GET "https://stackoverflow.com/users/sign_in" for 201.235.89.150 at 2016-07-06 01:35:03 +0000 
Completed 500 Internal Server Error in 3ms (ActiveRecord: 0.0ms) 
NoMethodError (undefined method `for' for #<Devise::ParameterSanitizer:0x007f5968e0a920>): 
app/controllers/application_controller.rb:11:in `configure_permitted_parameters' 

application_controller.rb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

     def configure_permitted_parameters 
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :provider, :uid) } 
      devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :current_password) } 
     end 
end 

Il fatto è che si sta lavorando bene a livello locale. È solo su Heroku. E inoltre funzionava bene un paio di giorni fa.

+2

Dai un'occhiata a questo. Forse può aiutarti. http://stackoverflow.com/questions/19791531/how-to-specify-devise-parameter-sanitizer-for-edit-action –

+0

Quando dici che funzionava bene un paio di giorni fa intendi su heroku? Vorrei provare a ottenere un nuovo gemst su heroku e riavviare i dynos per vedere se questo aiuta. –

+0

su Heroku la mia gemma devise è stata aggiornata alla 4.2, quindi ".for" non funziona più. Sono stato modificato in ".permit", come suggerito da @EddeAlmeida. Anche se ora sto avendo altri problemi riguardo a questo. Grazie a tutti. –

risposta

36
class ApplicationController < ActionController::Base  
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :phone, :email, bank_attributes: [:bank_name, :bank_account]]) 
    end 
end 

"Il metodo .per è deprecato in 4.1 +

Il primo arg è il nome dell'azione:. Sign_up è per la creazione di nuove risorse escogitare (ad esempio gli utenti), e: account_update è per la modifica/aggiornare la risorsa

il secondo arg.,: chiavi contiene una serie di parametri che consentono

Se volete nested_attributes, c'è un esempio in:. account_update, si mette un array separato con l'essere chiave _attributes ".