2013-05-03 11 views
8

Io uso Devise (2.2.3) e sto cercando di caricare il modulo di "modifica" per un utente che utilizza questo Ajax chiamata jQuery:Rails 3.2.13/Devise 2.2.3: Metodo "authenticate_scope!" getta errore: numero errato di argomenti (1 per 0)

$.ajax({ 
    type: 'GET', 
    url: '/users/edit', 
    data: { 
    id: id 
    } 
}); 

Questa volontà chiamare questo before_filter ...

prepend_before_filter :authenticate_scope!, :only => [:edit, :update, :destroy] 

... dal file gem ...

devise/app/controllers/devise/registrations_controller.rb 

(see: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb) 

il metodo che è poi chiamato a dire:

# Authenticates the current scope and gets the current resource from the session. 
def authenticate_scope! 
    send(:"authenticate_#{resource_name}!"), :force => true) 
    self.resource = send(:"current_#{resource_name}") 
end 

E l'errore che ottengo è:

ArgumentError at /users/edit 
============================ 

> wrong number of arguments (1 for 0) 

(gem) devise-2.2.3/app/controllers/devise/registrations_controller.rb, line 116 
------------------------------------------------------------------------------- 

``` ruby 
    111  signed_in_root_path(resource) 
    112  end 
    113 
    114  # Authenticates the current scope and gets the current resource from the session. 
    115  def authenticate_scope! 
> 116  send(:"authenticate_#{resource_name}!", :force => true) 
    117  self.resource = send(:"current_#{resource_name}") 
    118  end 
    119 end 
``` 

Ma quando elimino il ": forza => true", allora l'errore svanisce:

# Authenticates the current scope and gets the current resource from the session. 
def authenticate_scope! 
    send(:"authenticate_#{resource_name}!")) # deleted: :force => true 
    self.resource = send(:"current_#{resource_name}") 
end 

Quindi mi chiedo cosa significa ": force => true" ... Perché ottengo l'errore quando lo lascio sul posto? Suppongo che sia una cattiva idea codificare la gemma delle scimmie in questo modo. Ma cos'altro posso fare per evitare l'errore?

Grazie per il vostro aiuto!

risposta

19

capito: il problema era che avevo sovresposta il metodo ...

def authenticate_user! 
    # do some stuff 
    # of my own here 

    # then hand over to Devise's method 
    super 
end 

... nel ApplicationController. Ma deve assomigliare a questo:

def authenticate_user!(options={}) 
    # do some stuff 
    # of my own here 

    # then hand over to Devise's method 
    super(options) 
end 

Speranza che aiuta qualcuno, un giorno, forse ...

+1

mi sa che devo dire ora: Grazie, @TomDogg, sei davvero intelligente :-) – TomDogg

+0

Dopo due ore non capisco nulla (ma scavando nel profondo nella progettazione), grazie! Abbiamo avuto lo stesso identico problema. Ti meriti tutti gli uppoints dalla domanda, attraverso la risposta al commento! :) –

+0

Ho appena avuto lo stesso problema, grazie! – ABrowne

Problemi correlati