2013-10-05 5 views
7

Sto lavorando a un'applicazione Rails 4 utilizzando Devise 3.1.1 per l'autenticazione dell'utente. Quando clicco su Rails collegamento /users/sign_up.user tiri seguente eccezione:Rails 4 Devise 3.1.1 ActionController :: UnknownFormat in Devise :: RegistrationsController # new

ActionController::UnknownFormat in Devise::RegistrationsController#new 
ActionController::UnknownFormat 

Rails.root: /home/rehan/odesk_work/kiefer-waight/ujoin/ujoin-www 

Application Trace | Framework Trace | Full Trace 
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:372:in `retrieve_collector_from_mimes' 
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:327:in `respond_with' 
devise (3.1.1) app/controllers/devise/registrations_controller.rb:8:in `new' 
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
activesupport (4.0.0) lib/active_support/callbacks.rb:413:in `_run__890637270__process_action__callbacks' 
.... 

non era in realtà Devise 3.0.0.rc quando viene avviato l'applicazione, ho pensato di aggiornare l'escogitare per 3.1.1 potrebbe risolvere il problema, ma non lo fece. Non ho trovato nulla di utile su SO/google/devise github project. Qualche idea su come aggirare il problema. Grazie!

risposta

13

Non volevo modificare i collegamenti predefiniti prodotti da Devise che aggiungevano ".user" alla fine di ciascun collegamento. Ideare prodotti seguenti collegamenti:

new_user_registration_path(resource_name) new_user_session_path(resource_name) new_user_password_path(resource_name)

nome_risorsa, che è utente, come parametro al percorso nel metodo link_to che indica di usare ".user" come formato. Quindi ho appena rimosso resource_name da ogni percorso. Mi chiedo perché Devise faccia questo!

+0

Inoltre non so perché hanno bisogno della 'risorsa' come parametro. Ho rimosso nel mio caso il parametro e ha funzionato. –

0

Quando si dice di fare clic sul collegamento /users/sign_up.user, si intende letteralmente quel percorso esatto? Perché il .user alla fine sta dicendo di provare a rispondere con un formato user, simile a pdf, xml o json. Rimuovilo e guarda cosa succede.

3

@ opere risposta di Zeeshan, è possibile anche le funzioni senza l'infisso _user:

new_registration_path(resource_name) 

new_session_path(resource_name) 

new_password_path(resource_name) 
1

Ho appena risolto questo problema anche.

La soluzione è quello di ripristinare tutti i percorsi a Devise quelli di default, nel senso di dire di no _user infisso.

noti che non siamo in grado per testare in consolle questi codice:

user = User.all.sample 
app.new_registration_path(user) 

perché usa Devise sua helper di trasformare l'url automaticamente internamente in modo non possiamo testare dall'esterno.