Idear la autenticación – devise_error_messages! en una vista causa “errores ‘de método indefinido para nil: NilClass

devise_error_messages! en una vista causa

undefined method 'errors' for nil:NilClass 

después de render :new en create método. Esto comenzó a suceder después de que heredé RegistrationsController de “Devise :: RegistrationsController” en lugar de “ApplicationController”. La representación inicial del método “nuevo” no causa ninguna excepción.

Controlador de registros anulados:

 class RegistrationsController  ex flash[:alert] = ex.message render :new end end end 

Los registros de vista / new.html.erb:

 

resource_name, :url => registration_path(resource_name)) do |f| %>
*
*
*

* -

Creo que es porque está generando la excepción antes de que se cree el objeto (el dispositivo lo llama el recurso). Y es necesario para el asistente de devise_error_messages .

Si desea evitar el acceso al registro, hay otras formas de lograrlo:

Una forma podría ser:

 class RegistrationsController < Devise::RegistrationsController def create if registration_enabled? super else flash[:alert] = I18n.t("registration_disabled") redirect_to action: :new end end end 

No estoy 100% seguro de si esto funcionaría, pero esta idea es renderizar la vista con el flash si el usuario no puede registrarse, por lo que se comportaría como la "representación inicial"

EDIT: En realidad creo que cambiando tu

 render action: :new 

a

 redirect_to action: :new 

sería suficiente para evitar el error, ya que redirect_to ejecutará el método, mientras que el renderizado simplemente renderiza la vista asociada.