2011-01-27 5 views
14

mi ruta principal legado es:Adición de una nueva acción para idear registrations_controller

devise_for :accounts, :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' 

entonces quiero una nueva url/acción, así que añadir lo siguiente antes de la línea devise_for arriba:

match '/accounts/signedup/' => 'users/accounts/registrations#signedup': 

continuación, en el controlador tengo la acción de registro, pero cuando voy a myurl.com/accounts/signedup que actualmente solo tiene:

def signedup 
    Rails.logger.debug { "&& signed_up" } 
end 

luego voy a myurl.com/accounts/signedup me sale:

AbstractController::ActionNotFound (AbstractController::ActionNotFound): 

Pero si quito el signedup definición del controlador de E en lugar de obtener:

The action 'signedup' could not be found for Users::Accounts::RegistrationsController" 

Alguna idea de lo que está mal?

Respuesta

13

solución era:

devise_for :accounts, :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' do 
    get "accounts/signedup", :to => "users/accounts/registrations#signedup", :as => "signedup_registration" 
end 
+15

por los documentos Idear recientemente:. "El paso de un bloque para devise_for está en desuso por favor retire el bloque de devise_for (sólo el bloque, la llamada a devise_for todavía debe existir) y llamar devise_scope: USUARIO ... termina con el bloque en su lugar ". –

15

Su respuesta es correcta, pero las versiones recientes de legado han desaprobado este comportamiento:

Pasando a un bloque devise_for está en desuso. Elimine el bloque de devise_for (solo debe existir el bloque, la llamada a devise_for) y llame a devise_scope: user do ... end with the block.

A juzgar por lo que ha publicado, en su caso probablemente debería usar after_sign_in_path_for en su RegistrosControlador personalizado.

Esto es lo que he usado en mi proyecto como alternativa:

devise_scope :user do 
    get 'session/on_signin', :to => 'sessions#memorize_session' 
    end 
+1

Para cualquier persona que encuentre esta respuesta, intente devise_scope: el usuario lo hace si recibe los mensajes de error "Quizás olvidó" cuando intenta usar los bloques define_scope. – George

+2

¿Es esta una respuesta o una nueva pregunta? –

+0

necesita usar 'devise_scope: usuario do' no 'devise_scope: los usuarios lo hacen' – user2666194

7

Usando el siguiente (asegúrese de que no es plural o se obtendrá el error anterior).

devise_scope :user do 
    get 'session/on_signin', :to => 'sessions#memorize_session' 
end 

A continuación, puede modificar el devise_for como de costumbre si necesita pasar los controladores personalizados.

devise_for: los usuarios

+0

'devise_scope: usuario' o' devise_scope: usuarios'? – Anwar

Cuestiones relacionadas