[英]Trying to show error messages, but running into: undefined method `errors' for nil:NilClass
[英]devise_error_messages! causes undefined method `errors' for nil:NilClass
我的layouts / application.html.erb上有一個表單,發布在下面,如果我添加行<%= devise_error_messages! %>
<%= devise_error_messages! %>
我收到以下錯誤。
如何在沒有分頁符的情況下添加devise_error_messages?
/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 %>
錯誤:
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 />
這是我正在使用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 < 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=>"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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.