devise_error_messages! 导致nil的未定义方法`errors’:NilClass

我在layouts / application.html.erb上有一个表单,发布在下面,如果我添加行 我收到以下错误。

如何在没有分页符的情况下添加devise_error_messages?

/app/views/layouts/application.html.erb

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

Add new contact

First Name

Last Name


Email

错误:

 NoMethodError in My_devise/sessions#index Showing /app/views/layouts/application.html.erb where line #59 raised: undefined method `errors' for nil:NilClass Extracted source (around line #59): 56: New Contact 57: 
58: resource_name, :url => registration_path(resource_name)) do |f| %> 59: 60:

Add new contact

61: First Name
62:

这是我正在使用http://localhost:3000/admin/home的URL,这里是我的routes.rb

 devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' get "/users/sign_in", :to => "my_devise/sessions#new" get 'admin/home', :to => 'my_devise/sessions#index' get 'users/sign_up', :to => 'my_devise/registrations#new' end devise_for :users, :controllers => {:sessions => "my_devise/sessions", :registrations => "my_devise/registrations"} get "home/index" root :to => "home#index" 

/app/controllers/my_devise/sessions_controller.rb

 class MyDevise::SessionsController  'application' end def new super end def create super end end 

/app/controllers/my_devise/registrations_controller.rb

 class MyDevise::RegistrationsController < Devise::RegistrationsController def index end end 

耙路线:

 users_sign_out GET /users/sign_out(.:format) {:controller=>"devise/sessions", :action=>"destroy"} users_sign_in GET /users/sign_in(.:format) {:controller=>"my_devise/sessions", :action=>"new"} admin_home GET /admin/home(.:format) {:controller=>"my_devise/sessions", :action=>"index"} users_sign_up GET /users/sign_up(.:format) {:controller=>"my_devise/registrations", :action=>"new"} new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"} user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"} destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"} new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"} cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"} user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"} edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"} PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"} DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"} new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"my_devise/sessions"} POST /users/sign_in(.:format) {:action=>"create", :controller=>"my_devise/sessions"} destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"my_devise/sessions"} POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"} GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"} GET /users/cancel(.:format) {:action=>"cancel", :controller=>"my_devise/registrations"} POST /users(.:format) {:action=>"create", :controller=>"my_devise/registrations"} GET /users/sign_up(.:format) {:action=>"new", :controller=>"my_devise/registrations"} GET /users/edit(.:format) {:action=>"edit", :controller=>"my_devise/registrations"} PUT /users(.:format) {:action=>"update", :controller=>"my_devise/registrations"} DELETE /users(.:format) {:action=>"destroy", :controller=>"my_devise/registrations"} home_index GET /home/index(.:format) {:controller=>"home", :action=>"index"} root / {:controller=>"home", :action=>"index"} root / {:controller=>"home", :action=>"index"} 

我有可能是类似的问题。

我花了一段时间来搞清楚,但就我而言,原因是:

 def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end helper_method :current_user 

在我的application_controller.rb文件中。

我在教程中添加了这一行。 删除后,我没有收到有关“devise_error_messages”的错误。 我不太明白为什么这会让事情变得烦恼,也许’current_user’在别处被定义并且它设置(或导致设置)错误对象。

尝试更改devise_for路由,查看此文档http://rdoc.info/github/plataformatec/devise#Configuring_routes

您可以使用:path参数添加自己的前缀

这是一个样本

 devise_for :users, :path => "", :path_names => { :sign_in => 'signin', :sign_out => 'signout', :sign_up => 'signup' }, :sign_out_via => [:delete], :controllers => {:sessions => 'my_devise/sessions', :registrations => 'my_devise/registrations'} 

重新审视一个项目我暂时没有时间触摸,但简单的答案就是在application_controller中创建User对象。

我将这个片段添加到application_controller:

 before_filter :instantiateUser def instantiateUser @user = User.new end