设计身份validation – devise_error_messages! 在一个视图中导致nil的“未定义的方法`错误”:NilClass

devise_error_messages! 在一个视图中导致

undefined method 'errors' for nil:NilClass 

render :newrender :new create方法中的render :new 。 这是在我从“Devise :: RegistrationsController”而不是“ApplicationController”inheritanceRegistrationsController后开始发生的。 “新”方法的初始呈现不会导致任何exception。

重写注册控制器:

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

视图registrations / new.html.erb:

 

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

* -

我相信这是因为你在创建对象(设计称为资源)之前引发了exception。 devise_error_messages助手需要它。

如果您想阻止访问注册,还有其他方法可以实现此目的:

一种方法可能是:

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

我不是百分之百确定这是否可行但是这个想法是如果用户无法注册就用flash渲染视图,所以这将表现为“初始渲染”

编辑:其实我相信改变你的

 render action: :new 

 redirect_to action: :new 

将足以防止错误,因为redirect_to将执行方法,而渲染只是渲染关联视图。