devise_error_messages!对nil:NilClass导致未定义的方法`errors' [英] devise_error_messages! causes undefined method `errors' for nil:NilClass

查看:133
本文介绍了devise_error_messages!对nil:NilClass导致未定义的方法`errors'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的布局/ application.html.erb上有一个表单,该表格在下面发布,如果我添加了<%= devise_error_messages! %> 我得到以下错误。



我如何添加devise_error_messages而不分页?



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

 <%= form_for资源,:as => resource_name,:url => registration_path(resource_name))do | f | %GT; 
<%= devise_error_messages! %GT; <! - 这一行导致问题 - >
< h3>添加新联系人< / h3>
名字< br />
<%= f.text_field:username%>< br />
姓氏< br />
<%= f.text_field:password%>< br />
<%= f.text_field:password_confirmation%>< br />
电子邮件< br />
<%= f.text_field:email%>
< hr />
<%= f.submit添加联系人%>

<%end%>

错误:

 code> My_devise / sessions中的NoMethodError#index 

显示/app/views/layouts/application.html.erb,其中第59行提出:

undefined方法`错误'为nil:NilClass

提取源(围绕行#59):

56:< a href =#class =has-popupballoon button button-蓝色>< span class =add>< / span>新联系人< / a>
57:< div class =popupballoon top>
58:<%= form_for(resource,:as => resource_name,:url => registration_path(resource_name))do | f | %GT;
59:<%= devise_error_messages! %GT;
60:< h3>添加新的联系人< / h3>
61:名字< br />
62:<%= f.text_field:username%>< br />

这是我使用的网址 http:// localhost:3000 / admin / home ,这里是我的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 / registrationments#new'
end

devise_for:users,:controllers => {:sessions => my_devise / sessions,:registrations => my_devise / registrations}
gethome / index
root:to => home#index

/app/controllers/my_devise/sessions_controller.rb

  class MyDevise :: SessionsController< Devise :: SessionsController 
layout false

before_filter:authenticate_user!

def index
render:layout => '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 =>新的,: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 /注册}
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 / use rs / 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 / registration}
PUT /users(.:format){:action =>update,:controller =>my_devise / registrations}
DELETE /users(.:format){ :action =>destroy,:controller =>my_devise / regis trations}
home_index GET /home/index(.:format){:controller =>home,:action =>index}
root / {:controller => home,:action =>index}
root / {:controller =>home,:action =>index}
pre>

解决方案

重新审视项目我没有时间触摸一段时间,但简单的答案只是为了创建user_controller中的用户对象。



我将此片段添加到application_controller中:

  before_filter:instantiateUser 

def instantiateUser
@user = User.new
end


I have a form on my layouts/application.html.erb that is posted below and and if i add the line <%= devise_error_messages! %> I get the error below.

How can i add the devise_error_messages without having the page break?

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

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>  <!-- this line causes issues -->
    <h3>Add new contact</h3>
    First Name<br />
    <%= f.text_field :username %><br />
    Last Name<br />
    <%= f.text_field :password %><br />
    <%= f.text_field :password_confirmation %><br />                                
    Email<br />
    <%= f.text_field :email %>
    <hr />
    <%= f.submit "Add Contact" %>

<% end %>

Error:

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:                             <a href="#" class="has-popupballoon button button-blue"><span class="add"></span>New Contact</a>
57:                             <div class="popupballoon top">
58:                             <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
59:   <%= devise_error_messages! %>
60:                                 <h3>Add new contact</h3>
61:                                 First Name<br />
62:                                 <%= f.text_field :username %><br />

This is the url i'm using http://localhost:3000/admin/home and here's my 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 < Devise::SessionsController
    layout false

    before_filter :authenticate_user!

    def index
        render :layout => '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

Rake routes:

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"}

解决方案

Revisiting a project I haven't had time to touch in a while, but the simple answer was just to create the User object in the application_controller.

I added this snippet to the application_controller:

before_filter :instantiateUser

def instantiateUser
    @user = User.new
end

这篇关于devise_error_messages!对nil:NilClass导致未定义的方法`errors'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆